В вашем случае было бы лучше следовать рекомендациям, используя PrparedStatment
вместо Statement
, или, по крайней мере, исправить запрос на вставку, поскольку вы пытаетесь вставить буквенные значения x1,y
, а не переменные x1
& y
.правильная реализация PreparedStatement
будет такой:
String sql = "INSERT INTO data (amt, dis) VALUES(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, x1);
pstmt.setDouble(2, y);
pstmt.executeUpdate();
, если вы хотите продолжать использовать Statement
, вам следует изменить тип запроса на executeUpdate
вместо executeQuery
, и вытакже следует добавить фактические значения ваших переменных, рабочий пример может быть:
Statement stmt=con.createStatement();
String x = t1.getText();
int x1 = Integer.parseInt(x);
String y = t2.getText();
String query = String.format("INSERT INTO data (amt, dis) VALUES (%d,%s)",x1,y);
stmt.executeUpdate(query);
Примечания:
- Если ваше приложениепредполагается, что в базу данных будут поступать разные петиции, вы можете рассмотреть возможность создания независимого метода для инициализации вашего соединения с базой данных, чтобы вы могли вызывать его там, где вам это необходимо, рабочим примером может быть следующий:
private Connection connect() {
// SQLite connection string
String url = "jdbc:mysql://localhost:3306/try";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, "root", "root");
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
- Переменная
ResultSet
, которая генерируется после запроса, который не извлекает данные, даст вам Integer
число затронутых строк.