#java #android #android-studio #jdbc #oracle11g
Вопрос:
Я новичок в Android Studio и пытаюсь разработать простое приложение с помощью jdbc для подключения базы данных Oracle. Соединение работает нормально, и я могу показать таблицу со значениями. Теперь я ищу способ показать значение из БД с помощью входного значения, но когда я нажимаю кнопку, я получаю исключение sqlexception, и приложение сворачивается.
общедоступный класс MainActivity расширяет совместимость приложений {
private TextView textViewConn;
private Button buttonView;
private EditText codUser;
private TextView typeApi;
private Statement stmt;
private Statement stmt1;
private PreparedStatement pstmt;
private static final String DEFAULT_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DEFAULT_URL = "jdbc:oracle:thin:@XXXXXXXXXXXXXXXX";
private static final String DEFAULT_USERNAME = "XXXXXXX";
private static final String DEFAULT_PASSWORD = "XXXXXXX";
private Connection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
textViewConn = findViewById(R.id.textView2);
buttonView = findViewById(R.id.button);
codUser = findViewById(R.id.editTextTextPersonName);
typeApi = findViewById(R.id.textView4);
try {
this.connection = createConnection();
Toast.makeText(MainActivity.this, "Connected",
Toast.LENGTH_SHORT).show();
stmt=connection.createStatement();
textViewConn.setText("Database connected");
TableLayout stk = (TableLayout) findViewById(R.id.table_main);
TableRow tbrow0 = new TableRow(this);
TextView tv0 = new TextView(this);
tv0.setText(" Code ");
tv0.setTextColor(Color.WHITE);
tbrow0.addView(tv0);
TextView tv1 = new TextView(this);
tv1.setText(" User ");
tv1.setTextColor(Color.WHITE);
tbrow0.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText(" Password ");
tv2.setTextColor(Color.WHITE);
tbrow0.addView(tv2);
/* TextView tv3 = new TextView(this);
tv3.setText(" Stock Remaining ");
tv3.setTextColor(Color.WHITE);
tbrow0.addView(tv3);*/
stk.addView(tbrow0);
ResultSet rs=stmt.executeQuery("select FEC_CODICE, FEC_IX_USERNAME, FEC_IX_PASSWORD from FE_CONTROL");
while(rs.next()) {
TableRow tbrow = new TableRow(this);
TextView t1v = new TextView(this);
t1v.setText(rs.getString(1));
t1v.setTextColor(Color.WHITE);
t1v.setGravity(Gravity.CENTER);
tbrow.addView(t1v);
TextView t2v = new TextView(this);
t2v.setText(rs.getString(2));
t2v.setTextColor(Color.WHITE);
t2v.setGravity(Gravity.CENTER);
tbrow.addView(t2v);
TextView t3v = new TextView(this);
t3v.setText(rs.getString(3));
t3v.setTextColor(Color.WHITE);
t3v.setGravity(Gravity.CENTER);
tbrow.addView(t3v);
stk.addView(tbrow);
}
stmt.close();
buttonView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//this.connection = createConnection();
Toast.makeText(MainActivity.this, "Connected",
Toast.LENGTH_SHORT).show();
//stmt=connection.createStatement();
String code=codUser.getText().toString();
//ResultSet rs1=stmt1.executeQuery("select FEC_IX_VERSIONE from FE_CONTROL FEC_CODICE = 'Z'");
pstmt= connection.prepareStatement("select FEC_IX_VERSIONE from FE_CONTROL FEC_CODICE = ?");
pstmt.setString(1,code);
pstmt.execute();
ResultSet rs1=pstmt.getResultSet();
while(rs1.next()){
typeApi.setText(rs1.getString(1));
}
pstmt.close();
} catch (SQLException throwables) {
typeApi.setText(throwables.getmessage());
}
}
});
//connection.close();
}
catch (Exception e) {
/*Toast.makeText(MainActivity.this, "" e,
Toast.LENGTH_SHORT).show();*/
textViewConn.setText(e.getmessage());
}
}
public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException {
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
}
public static Connection createConnection() throws ClassNotFoundException, SQLException {
return createConnection(DEFAULT_DRIVER, DEFAULT_URL, DEFAULT_USERNAME, DEFAULT_PASSWORD);
}
}
Я использую отладчик для проверки исключения, но строка отладки не входит в этот метод buttonView.setOnClickListener(new View.OnClickListener()
, и я заметил, что приложение запускается без отображения табличного представления и кнопки, текстового представления и т. Д. В режиме отладки. Я не могу понять, когда они убегают.
Кто-нибудь может дать какое-нибудь представление?
Комментарии:
1. Не могли бы вы, пожалуйста, обновить трассировку стека исключений в своем вопросе?
2. Я хотел бы обновить трассировку стека исключений, но теперь, когда я нажимаю кнопку, у меня нет никаких исключений, и приложение сворачивается. Через три раза я получаю сообщение:»Приложение NameApp продолжает останавливаться — информация о приложении или закройте приложение». Есть какие-нибудь идеи по этому поводу?
3. Это странно. У него всегда должна быть дорожка стека. Не могли бы вы, пожалуйста, изменить уровень отладки с
verbose
error
amp; на правую сторону вместоshow only selected application
выбораNo filters
. После этого попробуйте нажать на кнопку и позвольте приложению рухнуть/свернуться. Затем попробуйте найти связанный с этим журнал (он будет темно-синего цвета). Дайте мне знать, получите ли вы журнал, сделав это, или нет.4. Когда я запускаю отладку, я не могу показывать кнопки и поля. и я не могу понять, почему. Поэтому я попытался сделать то, что написал, но я не могу показать кнопку и не могу нажать на кнопку