动态删除查询

时间:2013-12-12 15:08:54

标签: java sql sqlite nullpointerexception resultset

我正在尝试制作动态删除查询。

我基本上尝试做的是首先获取任何表(主键)中第一列的名称。然后我在另一个查询中使用它来删除该表,虽然我得到一个nullpointerexception?

哦,主键不是像1,2,3,4,5那样的INT ..它形成了S1,S2,S3,S4,S5等,并且有TEXT类型。

 Connection c = null;
Statement stmt = null;
try {
  Class.forName("org.sqlite.JDBC");
  c = DriverManager.getConnection("jdbc:sqlite:test.db");
  c.setAutoCommit(true);
  System.out.println("Opened database successfully");

  ResultSet rs = stmt.executeQuery("SELECT * FROM "+tablename);
  ResultSetMetaData rsmd = rs.getMetaData();
  FirstColumn = rsmd.getColumnName(1);
  String query = "DELETE FROM "+tablename+" WHERE " +FirstColumn+ " = " +row;
  stmt = c.createStatement();

  stmt.executeUpdate(query);

  stmt.close();
  c.close(); 

2 个答案:

答案 0 :(得分:1)

初始化您的stmt对象...

stmt = c.createStatement();

在执行查询之前。

答案 1 :(得分:1)

我将假设您正在使用的所有变量都已初始化。

我在FirstColumn名称周围添加了单引号。

Connection c = null;
    Statement stmt = null;
    try {
      Class.forName("org.sqlite.JDBC");
      c = DriverManager.getConnection("jdbc:sqlite:test.db");
      c.setAutoCommit(true);
      System.out.println("Opened database successfully");

      ResultSet rs = stmt.executeQuery("SELECT * FROM "+tablename);
      ResultSetMetaData rsmd = rs.getMetaData();
      FirstColumn = rsmd.getColumnName(1);
      String query = "DELETE FROM "+ tablename +" WHERE " + FirstColumn + " = '" + row + "'";
      stmt = c.createStatement();

      stmt.executeUpdate(query);

      stmt.close();
      c.close(); 

如果您仍然收到错误,请尝试打印出您的行名称并查看打印出来的内容。

编辑:由于您在风格上是新的,因此在使用运算符来提高代码可读性时,最好添加单个空格。例如,1 + 3 + x + 34比1 + 3 + x + 34更难阅读。当然,没有"错误"代码风格,但提高代码可读性始终是一个加号。