Исключение SQLException в setOnClickListener(новый вид.OnClickListener() — Студия Android

#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. Когда я запускаю отладку, я не могу показывать кнопки и поля. и я не могу понять, почему. Поэтому я попытался сделать то, что написал, но я не могу показать кнопку и не могу нажать на кнопку