SMALL

jquery 부모 창 데이터 받아오기


- id 접근시

$(#id ,  opener,document).val();

※ opnner,document 쓰시면 부모창 data 접근이 가능합니다^^



- name 접근시

$(#id [name=name],  opener,document).val();




- data가 많은경우 index로 받고싶은 경우

$(#id ,  opener,document).eq(index).val();

※ eq(index) 사용시 접근이 가능합니다





감사합니다^^

LIST
블로그 이미지

SeoHW

,
SMALL

오라클 REPLACE 사용기



예제1

REPLACE('101,681',',');


결과값은


101681 로 콤마가 사라지게된다


예제2

REPLACE('101,681',',','5');


결과값은


1015681 로 된다



REPLACE(값,비교값,변환값) 으로 사용하시면됩니다

REPLACE(값,비교값) 사용시 비교값이 삭제됩니다




감사합니다

LIST
블로그 이미지

SeoHW

,
SMALL

ORACLE "% "퍼센트 구하기 자료


WITH AAA AS(

SELECT '홍길동1' NAME, 10 CNTS FROM DUAL UNION ALL

SELECT '홍길동2' NAME, 25 CNTS FROM DUAL UNION ALL

SELECT '홍길동3' NAME, 25 CNTS FROM DUAL UNION ALL

SELECT '홍길동4' NAME, 10 CNTS FROM DUAL UNION ALL

SELECT '홍길동5' NAME, 30 CNTS 


)


SELECT NAME

, ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%'  CNTS

FROM AAA

;


결과물

 

 NAME

 CNTS

 1

 홍길동1

 10%

 2

 홍길동2

 25%

 3

 홍길동3

 25%

 4

 홍길동4

 10%

 5

 홍길동5


 30%

나오게 됩니다 ㅎ


위처럼 자료가 적을경우 예외없이 정상으로 나오게됩니다

하지만

자료가 많을경우 % 퍼센트가 " .45% " 이런식으로 0.45이지만 0이 안붙어서 나오게됩니다. 그럴 경우에는 아래 처럼 하면됩니다



SELECT NAME,

DECODE(

SUBSTR(

ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%' ,1,1)

,'.'

'0' II ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2) II '%',

ROUND(RATIO_TO_REPORT(CNTS) OVER() *100),2)  II '%'

) CNTS


하시면 0.45%로 나오게 됩니다


감사합니다


LIST
블로그 이미지

SeoHW

,
SMALL


안도르이드 스튜디오는 OS안에서 DB와 TABLE 을 핸들링 할 수 있습니다 그래서 간단한 쿼리문으로 응용해서 예제를 작성해보도록 할텐데요 자바클래스와 xml이 너무 많은 관계로 주석으로 대체 설명이 되어있으니 참고하시고 읽어주세요 첫 순서는 DB생성과 TABLE 생성과 검색기능이 있고 그 다음 로그인화면으로 이동을 하는 버튼이 있습니다 그 이후에 로그인을 하게되면 게시판형식의 listView가 뜨고 거기에 글을 쓰거나 읽을 수 있는 기능을 구현해봤습니다

activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.ntsysmac01.sampledatabase.MainActivity">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout">
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="customer.db"
            android:id="@+id/editText"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="DB 생성"
            android:id="@+id/button" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:id="@+id/linearLayout2">
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="employee"
            android:id="@+id/editText2"
            android:layout_weight="1" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Table 생성"
            android:id="@+id/button2" />
    </LinearLayout>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="상태 : "
        android:id="@+id/textView"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_below="@+id/linearLayout2"
        android:layout_marginTop="95dp"
        android:layout_alignParentBottom="true" />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout2"
        android:layout_marginBottom="52dp"
        android:weightSum="1">
        <EditText
            android:layout_width="204dp"
            android:layout_height="wrap_content"
            android:id="@+id/editText3"
            android:layout_weight="1.25" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="검색하기"
            android:id="@+id/button3" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="로그인하기"
        android:id="@+id/button4"
        android:layout_marginTop="46dp"
        android:layout_below="@+id/linearLayout2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>
cs

MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
package com.example.ntsysmac01.sampledatabase;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity {
    SQLiteDatabase db;
    //db를 커넥션 해주기 위해 필요한 메소드
    MySQLiteOpenHelper helper;
    String databaseName;
    String tableName;
    String searchName;
    Button button;
    EditText editText;
    Button button2;
    EditText editText2;
    Button button3;
    EditText editText3;
    Button button4;
    TextView textView;
    boolean databaseCreated = false;
    boolean tableCreated = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //첫번째는 현재화면의 context를 지정
        //두번째는 db 파일명
        //세번째는 버전 번호
        helper = new MySQLiteOpenHelper(MainActivity.this,
                "customer.db",
                null,
                1);
        button = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.editText);
        button2 = (Button)findViewById(R.id.button2);
        editText2 = (EditText)findViewById(R.id.editText2);
        button3 = (Button)findViewById(R.id.button3);
        editText3 = (EditText)findViewById(R.id.editText3);
        button4 = (Button)findViewById(R.id.button4);
        textView = (TextView)findViewById(R.id.textView);
        //첫번째 버튼은 db를 생성하거나 열어주는 역할
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //editText를 받아서 변수에 넣어줌
                databaseName = editText.getText().toString();
                //그 변수를 실행
                createDatabase(databaseName);
            }
        });
        //두번째 버튼은 db에 테이블을 생성하는 역할
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //editText를 받아서 변수에 넣어줌
                tableName = editText2.getText().toString();
                //그 변수를 실행
                createTable(tableName);
                //레코드 입력 메소드를 호출함
                int count = insertRecord();
                println(count + "records inserted.");
            }
        });
        //세번째 버튼은 테이블을 검색 하는 역할
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //editText를 받아서 변수에 넣어줌
                searchName = editText3.getText().toString();
                //그 변수를 실행
                searchTable(searchName);
            }
        });
        //네번째 버튼은 로그인 화면으로 이동해주는 역할
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), login.class);
                startActivity(intent);
            }
        });
    }
    //현재 상태가 어떻게 되는지 textview에 표현해주는 기능
    private void println(String s) {
        textView.append("\n" + s);
    }
    //데이터베이스를 만들어주는 기능
    private void createDatabase(String name) {
        //현재 상태가 어떻게 되는지 textview에 뿌려줌
        println("creating database [" + name + "].");
            //db를 name값으로 생성해줌 (name값은 위에 databaseName 값을 가져옴)
            db = openOrCreateDatabase(name, MODE_WORLD_WRITEABLE, null);
            databaseCreated = true;
    }
    //테이블을 만들어주는 기능
    private void createTable(String name) {
        //현재 상태가 어떻게 되는지 textview에 뿌려줌
        println("creating table [" + name + "].");
        //위에 tableName값을 name으로 받아와서 테이블을 생성
        db.execSQL("create table "
                + name
                + "("
                + " _id integer PRIMARY KEY autoincrement, "
                + " name text, "
                + " age integer, "
                + " phone text);");
        tableCreated = true;
    }
    //테이블을 검색해주는 기능
    private void searchTable(String searchName) {
        //db객체를 얻어옴(읽기)
        db = helper.getReadableDatabase();
        //db에 들어있는 값들은 Cursor로 받아줘야됨
        //Cursor c = db.query(searchName, null, null, null, null, null, null); <<이렇게 해줘도됨 하지만 밑에게 더 간단함
        Cursor c = db.rawQuery("select * from " + searchName, null);
        //받아와서 뿌려주는 작업은 while문을 이용해야됨
        //while문 안의 조건에 들어가있는 c.moveToNext()는 위에 담아온 Cursor에 다음 값이 있으면 계속 실행
        //만약에 다음값이 없다면 멈춘다는 뜻
        while (c.moveToNext()){
            //각자의 값을 맡는 타입의 변수를 만들어 넣어줌
            String name = c.getString(c.getColumnIndex("name"));
            int age = c.getInt(c.getColumnIndex("age"));
            String phone = c.getString(c.getColumnIndex("phone"));
            //그리고 값을 뿌려줌
            println(searchName+" 테이블의 값 =\n이름 : " + name + " 나이 : " + age + " 번호 : " + phone);
        }
    }
    //테이블에 값을 넘어줌 insert (테이블 검색기능을 테스트해보기 위해서)
    private int insertRecord(){
        println("inserting records.");
        int count = 3;
        db.execSQL("insert into employee(name, age, phone) values ('john', 20, '010-1234-5678');");
        return count;
    }
}
cs

MySQLiteOpenHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.example.ntsysmac01.sampledatabase;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
 * Created by ntsysMac01 on 2015-12-21.
 */
//이 클래스는 helper로 db를 커넥션 연동 시키기 위해서 꼭 필요한 클래스 이다
public class MySQLiteOpenHelper extends SQLiteOpenHelper{
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}
cs

login.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="I D"
            android:id="@+id/textView2"
            android:textAlignment="center" />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/editText4" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="P W"
            android:id="@+id/textView3"
            android:textAlignment="center" />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/editText5" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="ID는 이름 PW는 나이로 입력해주세요."
            android:id="@+id/textView4" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="확인"
            android:id="@+id/button5" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="상태 : "
            android:id="@+id/textView5" />
    </LinearLayout>
</LinearLayout>
cs

login.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.example.ntsysmac01.sampledatabase;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class login extends AppCompatActivity {
    SQLiteDatabase db;
    MySQLiteOpenHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        //db를 사용해야되기 때문에 helper에 연결시켜준다
        helper = new MySQLiteOpenHelper(login.this,
                "customer.db",
                null,
                1);
        final EditText id = (EditText)findViewById(R.id.editText4);
        final EditText pw = (EditText)findViewById(R.id.editText5);
        Button button = (Button)findViewById(R.id.button5);
        final TextView textView = (TextView)findViewById(R.id.textView5);
        //버튼을 클릭하게 됨과 동시에 db에서 확인을하게 된다
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                db = helper.getReadableDatabase();
                String name = id.getText().toString();
                String age = pw.getText().toString();
                String db_name = null;
                String db_age = null;
                //쿼리문 설정
                Cursor c = db.rawQuery("select * from employee" , null);
                //while문으로 역시 원하는값을 변수에 넣어줌
                while (c.moveToNext()){
                    db_name = c.getString(c.getColumnIndex("name"));
                    db_age = c.getString(c.getColumnIndex("age"));
                }
                //그다음 조건문을 걸어줘서 조건에 부합하다면 성공 메세지와 함께 다음 화면으로 이동
                if(name.equals(db_name) && age.equals(db_age)){
                    textView.append("\n로그인 성공!!!");
                    Intent intent = new Intent(getApplicationContext(), listview.class);
                    startActivity(intent);
                }else if(TextUtils.isEmpty(name) || TextUtils.isEmpty(age)){//유효성검사 해당 변수에 안에 값의 null이거나 비어 있는지를 체크
                    Toast.makeText(login.this,"ID와 PW를 입력하세요",Toast.LENGTH_LONG).show();
                }else{
                    //아니라면 실패라는 메세지와 함께 화면 이동은 발생하지 않음
                    textView.append("\n실패");
                }
            }
        });
    }
}
cs

list.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#009cc3">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="번호"
            android:id="@+id/textView23"
            android:layout_weight="1"
            android:textAlignment="center" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="제목"
            android:id="@+id/textView24"
            android:layout_weight="1"
            android:textAlignment="center" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="작성자"
            android:id="@+id/textView25"
            android:layout_weight="1"
            android:textAlignment="center" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="날짜"
            android:id="@+id/textView26"
            android:layout_weight="1"
            android:textAlignment="center" />
    </LinearLayout>
    <ListView
        android:layout_width="match_parent"
        android:layout_height="430dp"
        android:id="@+id/listView" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="글쓰러가기"
        android:id="@+id/button7"
        android:layout_gravity="center_horizontal" />
</LinearLayout>
cs

Item.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.example.ntsysmac01.sampledatabase;
/**
 * Created by ntsysMac01 on 2015-12-22.
 */
public class Item {//listView에 데이터가 들어갈 공간을 정의함
    private String[] borditem;//String 배열 타입에 데이터를 넣기위해 선언
    public Item(String[] obj02){
        borditem = obj02;//다른곳에서 값을 넣어줄 수 있게함
    }
    public String[] borditemdate(){
        return borditem;
    }//다른곳에서 이 값을 쓸수있게 설정
    public String borditemdate(int index){//배열 값을 받아쓸때 if문을 한번거침 값이 없거나 인덱스 값이 배열이 가지고 있는 데이터 갯수보다 같거나 크면 null값을 return 해줌
        if (borditem == null || index >= borditem.length) {
            return null;
        }
        return borditem[index];
    }
}
cs

ItemView.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.example.ntsysmac01.sampledatabase;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
 * Created by ntsysMac01 on 2015-12-22.
 */
public class ItemView extends LinearLayout {//ItemView는 보여지는 역할을 해주는 클래스
    //값을 보여줘야 하기 때문에 보여줄때 필요한 타입을 변수로 선언
    private TextView numtext;//번호
    private TextView subtext;//제목
    private TextView nametext;//이름
    private TextView daytext;
    public ItemView(Context context, Item date) {
        super(context);
        LayoutInflater inflater = (LayoutInflater)//컨텐츠가 보여질 xml을 내가만든 xml로 설정하기 위해 inflater을 설정
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.bordlist_content, thistrue);
        //어느 변수에 무엇이 어떤값이 들어가야 되는지 각각 설정
        numtext = (TextView)findViewById(R.id.textView6);
        numtext.setText(date.borditemdate(0));
        subtext = (TextView)findViewById(R.id.textView7);
        subtext.setText(date.borditemdate(1));
        nametext = (TextView)findViewById(R.id.textView8);
        nametext.setText(date.borditemdate(2));
        daytext = (TextView)findViewById(R.id.textView9);
        daytext.setText(date.borditemdate(3));
    }
    //배열로 처리된 값들을 setText로 쪼개줌
    //위에서 쓰게되는것을 보면 이해가 쉬움
    public void setText(int index, String data){
        if (index == 0 ){
            numtext.setText(data);
        } else if (index == 1 ){
            subtext.setText(data);
        } else if (index == 2){
            nametext.setText(data);
        } else if (index == 3){
            daytext.setText(data);
        } else {
            throw new IllegalArgumentException();
        }
    }
    public ItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public ItemView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public ItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
}
cs

itemListAdapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.example.ntsysmac01.sampledatabase;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by ntsysMac01 on 2015-12-22.
 */
//BaseAdapter에 상속받기 때문에 extends 해줌
public class itemListAdapter extends BaseAdapter{
    private Context mContext;
    //어댑터를 사용할것이기 때문에 리스트를 생성해줌
    private List<Item> mItems = new ArrayList<Item>();
    itemListAdapter(Context context){
        mContext = context;
    }
    void additem(Item it){
        mItems.add(it);
    }
    private void setListItems(List<Item> list){
        mItems = list;
    }
    @Override
    public int getCount() {
        return mItems.size();
    }
    @Override
    public Object getItem(int position) {
        return mItems.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    //저번 예제에서 살펴봤던거와 동일하게 작업해주면 됨
    //퍼포먼스역할과 View 보여주는 역할을 해주는 기능
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemView itemView;
        if(convertView == null) {
            itemView = new ItemView(mContext, mItems.get(position));
        } else {
            itemView = (ItemView) convertView;
            itemView.setText(0, mItems.get(position).borditemdate(0));
            itemView.setText(1, mItems.get(position).borditemdate(1));
            itemView.setText(2, mItems.get(position).borditemdate(2));
            itemView.setText(3, mItems.get(position).borditemdate(3));
        }
        return itemView;
    }
}
cs

listview.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.example.ntsysmac01.sampledatabase;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
public class listview extends AppCompatActivity {
    SQLiteDatabase db;
    MySQLiteOpenHelper helper;
    ListView listView;
    itemListAdapter adapter;
    String num;
    String sub;
    String name;
    String day;
    String content;
    Button writebtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        //list를 불러와야하기 때문에 db를 연결시켜준다
        helper = new MySQLiteOpenHelper(listview.this,
                "customer.db",
                null,
                1);
        //그리고 listview와 adapter를 설정해준다
        listView = (ListView)findViewById(R.id.listView);
        adapter = new itemListAdapter(this);
        String[] arr= new String[5];
        //쿼리문을 설정해주고
        db = helper.getReadableDatabase();
        Cursor c = db.rawQuery("select * from bord"null);
        //while문으로 원하는값을 변수에 담아준다
        //그리고 곧바로 뿌려준다
        while (c.moveToNext()){
            arr[0= num = c.getString(c.getColumnIndex("Num"));
            arr[1= sub = c.getString(c.getColumnIndex("Subject"));
            arr[2= name = c.getString(c.getColumnIndex("Name"));
            arr[3= day = c.getString(c.getColumnIndex("Day"));
            arr[4= content = c.getString(c.getColumnIndex("Content"));
            adapter.additem(new Item(arr));
            arr = new String[5];
        }
        listView.setAdapter(adapter);
        //해당 listView를 클릭하게 되면 상세보기 화면으로 넘어가게끔 설정
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getApplicationContext(), look.class);
                Item curItem = (Item)adapter.getItem(position);
                String[] curData = curItem.borditemdate();
                intent.putExtra("Item",curData);
                startActivity(intent);
            }
        });
        //글쓰기 버튼을 클릭하게 되면 글쓰기 화면으로 넘어게가끔 설정
        writebtn = (Button)findViewById(R.id.button7);
        writebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), write.class);
                startActivity(intent);
                finish();
            }
        });
    }
}
cs

write.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="제목"
            android:id="@+id/textView10" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText6" />
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="작성자"
            android:id="@+id/textView11" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/editText7" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="내용 : "
            android:id="@+id/textView12" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/editText8" />
    </LinearLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="확인"
        android:id="@+id/button6"
        android:layout_gravity="center_horizontal" />
</LinearLayout>
cs

write.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.example.ntsysmac01.sampledatabase;
import android.app.Application;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
//글쓰기페이지 역할
public class write extends AppCompatActivity {
    SQLiteDatabase db;
    MySQLiteOpenHelper helper;
    EditText sub;
    EditText name;
    EditText content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.write);
        sub = (EditText)findViewById(R.id.editText6);
        name = (EditText)findViewById(R.id.editText7);
        content = (EditText)findViewById(R.id.editText8);
        Button button = (Button)findViewById(R.id.button6);
        //사용할 db를 연동 시켜준다
        helper = new MySQLiteOpenHelper(write.this"customer.db"null1);
        db = helper.getWritableDatabase();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //글을 다 입력하고 클릭하는 동시에
                GregorianCalendar calendar = new GregorianCalendar();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int min = calendar.get(Calendar.MINUTE);
                int sec = calendar.get(Calendar.SECOND);
                //변수에 각각의 값을 담아주고
                String now = year + "-" + month + "-" + day + "\n" + hour + ":" + min + ":" + sec; //글쓴시간을 저장
                db.execSQL("insert into bord values(null,'"+sub.getText().toString()+"','" +name.getText().toString()+ "','"+now+"','" +content.getText().toString()+ "');");
                //db에 insert시켜준다
                Intent intent = new Intent(getApplicationContext(), listview.class);
                startActivity(intent);
                finish();
                //그다음 값을 intent에 실어주고 intent를 실행시켜준후 finish로 페이지를 닫아준다
            }
        });
    }
}
cs

예제 실행화면은 아래와 같습니다


초기화면에서 db와 테이블의 기능을 사용했고
그 다음 테이블에 담긴 값들을 검색해봤습니다
그리고 로그인버튼을 누르게 되면 아래로 이동하게 됩니다


ID와 PW는 db에 저장되어있는 이름값과 나이값으로 설정해뒀습니다
그래서 db에 연결후 확인하고 값과 동일하다면 다음페이지로 이동이 가능합니다
(상태에서 로그인 성공이 뜬 후 곧바로 자동으로 페이지 이동)


초기화면에 list가 보입니다 모두 db에 저장된 게시글 들이구요
작성시간 또한 저장되어 있습니다 글쓰러가기 버튼을 클릭한 후


제목과 작성자 내용을 입력하게 되면


다시 list로 넘어가게 되면서 밑에 금방 쓴 글이 추가된것을 확인할 수 있습니다


그 다음 그 글을 클릭하게되면 상세보기 페이지로 넘어가서
해당 글을 볼 수 있습니다

출처 : http://bestkkha.blogspot.com/2015/12/db-table.html

LIST
블로그 이미지

SeoHW

,
SMALL

안드로이드 오픈소스 링크입니다


http://coding-factory.tistory.com/209

LIST
블로그 이미지

SeoHW

,

input accept 속성사용기

Java 2018. 9. 28. 13:07
SMALL

정의

type 속성이 File Upload state일 경우 accept 속성을 활용하여 서버에서 수용하는 파일의 타입에 대해 사용자 에이전트가힌트를 주도록 할 수 있습니다.

속성 값

콤마로 구분된 예약어 목록입니다. 각각의 예약어들은 다음 중 하나와 매칭되어야 합니다.(대소문자는 구분하지 않습니다.)

예약어들은 중복될 수 없습니다. 이 중복을 체크할때는 대소문자를 구분하지 않습니다. (audio/* 와 Audio/* 는 중복입니다.)

예제

예제1

<p><label>프로필 사진: <input type="file" name="profile" accept="image/*"></label></p>
Opera 11 에서 실행화면

예제1은 모든 이미지 형태의 파일을 힌트로 보여줍니다.

예제2

<p><label>동영상: <input type="file" name="profile" accept="video/mp4"></label></p>
Opera 11 에서 실행화면

예제2는 'mp4' 형식의 동영상 파일을 힌트로 보여줍니다.

예제3

<p><label>지원서: <input type="file" name="profile" accept="application/msword"></label></p>
Opera 11 에서 실행화면

예제3은 MS Word 파일을 매개변수 없는 유효한 마임 타입(valid MIME type with no parameters) 지정함으로 해당 파일을 힌트로 보여줍니다.


출처: http://html5ref.clearboth.org/html5:attribute:accept_input



LIST
블로그 이미지

SeoHW

,

java split 문자열자르기

Java 2018. 9. 28. 09:22
SMALL

split는 문자열을 나누는 메서드다.

String 문자열 = "가:나:다:가나다";
String[] 나눈배열 = 문자열.split(":");
//나눈배열 : {"가", "나", "다", "가나다"}
System.out.println(나눈배열[0]);
//결과 : 가
System.out.println(나눈배열[나눈배열.length-1]);
//결과 : 가나다

그런데 아래처럼 쓰면 작동을 안 한다.

String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split(".");

이렇게 써야 한다.

String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split("\\.");

그래야 작동한다.

이건 split의 인자로 들어가는 String 토큰이 regex 정규식이기 때문이다. 정규식에서 .은 무작위의 한 글자를 의미한다. 그러면 모든 문자가 토큰이 되기 때문에 배열에 남는 게 없게 되는 것이다.

따라서 이스케이프 문자를 앞에 붙여 줘야 한다. 그런데 String 안에 이스케이프 문자인 \를 써 주려면 \\라고 써 줘야 한다. 따라서 \\라고 쓰는 것이다. 그래서 \\.이라고 쓰면 정규식 쪽에서는 \.라고 인식을 하고 실제 .을 찾게 되는 것이다.

아악… 머리아프다. 여튼 기억하라. 기호를 써서 split를 쓸 때 뭔가 작동을 안 하면 \\을 붙여 보라.

참, 그냥 \라고만 붙여야 하는 것도 있는데, 아래 애들이다.

\b \t \n \f \r \" \' \\

참고하면 될 것이다.

출처 : https://mytory.net/archives/285

LIST
블로그 이미지

SeoHW

,
SMALL

이클립스 메이븐 오프라인 모드

인터넷이 되지 않는 내부망(인트라넷)이나 ISP 문제로 메이븐 중앙 저장소에서 라이브러리들을 다운받을 수 없을 경우 이클립스에서 메이븐 오프라인 모드를 사용할 수 있다.

오프라인 모드를 사용하게 되면 메이븐 중앙 저장소에서 라이브러리를 다운받지 않고 로컬 메이븐 저장소 디렉토리의 라이브러리를 보게 된다.

 

오프라인 모드로 변경

Windows > Preferences > Maven

Offline 항목을 체크한다.


로컬 저장소 설정

Windows > Preferences > Maven > User Settings

 

메이븐 설정 파일인 settings.xml 에서 <localRepository> 태그를 추가하여 특정 디렉토리를 로컬 저장소로 지정한 뒤 User Settings 항목에 settings.xml 파일을 지정.


 

* 기존 메이븐 폴더를 세팅해둔 settings.xml 파일 같이 첨부하였음

사업단 메이븐 설정 폴더 C:\egov\maven\repository

노트북 PC 에 설치된 전자정부프레임워크 폴더 구조가 다르다면 거기에 맞게 경로 수정!

프로젝트 마우스 오른쪽 버튼 클릭 > Maven > Update Project


아래 그림과 같이 Offline 체크 되어 있는지 확인 후 OK 버튼 클릭


 


LIST
블로그 이미지

SeoHW

,
SMALL

아래 에러입니다

심각: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/first]]
 at java.util.concurrent.FutureTask.report(FutureTask.java:122)
 at java.util.concurrent.FutureTask.get(FutureTask.java:192)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/first]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@6c7e475e]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4969)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5099)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@45eb5a6]
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:135)
 at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 9 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
 at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 ... 12 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
 at java.util.zip.ZipFile.read(Native Method)
 at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
 at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
 at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419)
 at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
 at sun.misc.IOUtils.readFully(IOUtils.java:65)
 at java.util.jar.JarFile.getBytes(JarFile.java:425)
 at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
 at java.util.jar.JarFile.getManifest(JarFile.java:180)
 at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:111)
 ... 13 more


12월 31, 2016 9:19:12 오전 org.apache.catalina.core.ContainerBase startInternal
심각: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
 at java.util.concurrent.FutureTask.report(FutureTask.java:122)
 at java.util.concurrent.FutureTask.get(FutureTask.java:192)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:789)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:951)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 6 more


12월 31, 2016 9:19:12 오전 org.apache.catalina.startup.Catalina start
심각: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:789)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:951)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 11 more


12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol pause
정보: Pausing ProtocolHandler ["http-nio-8080"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol pause
정보: Pausing ProtocolHandler ["ajp-nio-8009"]
12월 31, 2016 9:19:12 오전 org.apache.catalina.core.StandardService stopInternal
정보: Stopping service Catalina
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
정보: Destroying ProtocolHandler ["http-nio-8080"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
심각: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
java.lang.NullPointerException
 at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
 at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
 at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:833)
 at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
 at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:879)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)


12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
정보: Destroying ProtocolHandler ["ajp-nio-8009"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
심각: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
java.lang.NullPointerException
 at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
 at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
 at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:833)
 at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
 at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:879)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)



해결은

maven 의 repository 폴더 내부의 모든 폴더를 삭제한뒤

프로젝트우클릭 - maven- Update project 하여 문제를 해결하였습니다


LIST

'Spring&mybatis(ibatis)' 카테고리의 다른 글

ibatis 태그 지원 목록입니다  (0) 2018.11.12
mybatis 기호 비교 등등  (0) 2018.10.26
mybatis order 속성사용  (0) 2018.10.26
@RestController , @Controller 차이점입니다  (0) 2018.03.20
Srping Hello 예제  (0) 2015.03.30
블로그 이미지

SeoHW

,
SMALL

안드로이드 스튜디오에서 가상 장치 AVD 가 아니라 실제 기기로 다운로드 하여 개발할때 아래와 같은 에러가 나온다.


Installation failed with message INSTALL_FAILED_OLDER_SDK.

It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.


WARNING: Uninstalling will remove the application data!


Do you want to uninstall the existing application?


화면을 캡쳐하면 아래와 같다.



이런 INSTALL_FAILED_OLDER_SDK 에러는 최저 SDK 사양이 맞지 않아서 발생한다. 우선 

최저 SDK 사양에 맞는 SDK를 설치 하는데 Tools->Android->SDK Manager에서 SDK를 설치하고,

개발중인 프로젝트의 minSDK 버전을 변경해준다. 여기서는 minSDK 가 22 로 되어있고 갤럭시 3에 다운로드 하려니 위와 같은 에러가 계속 발생되었다.


아래와 같은 프로젝트 화면에서 



프로젝트 이름에서, 여기서는 app 에서 마우스 오른쪽 버튼을 눌러 메뉴에서 Open Module Setting 을 선택한다.





열리는 창에서 Flavors 탭을 클릭하여 Min Sdk Version 에 아래와 같이 API19 를 선택주고 빠져나오면 된다.




그러면 AndroidMenifesto.xml 파일은 아무 변화 가 없고,  Bulild Gradle(Module : App) 파일의 minsdk 버전이 22 에서 19로 바뀐다.



apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.huins.androidsample"
minSdkVersion 19
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}

와 같이 변경하면 실제 안드로이드 기기에서 잘 실행될 것이다.

개발자의 공유는 삽질을 멈추게 한다.ㅎㅎ



출처: http://fishpoint.tistory.com/1669 [기린]

LIST
블로그 이미지

SeoHW

,