2016-03-08 59 views
-1

这是我目前的java程序。我需要做一个准备好的语句并连接到一个MySql数据库。Mysql select JAVA语句编写准备

try { 
     Connection connect = DriverManager.getConnection(host, username, password); 
     System.out.println("works fine connected"); 

     /* 
     * 
     * */ 
     String Dquery = ("SELECT * FROM ?"); 

     //create the java statement 
     PreparedStatement st = connect.prepareStatement(Dquery); 
     st.setString(1, "lmgs_Book"); 


     System.out.println("mySql statemnt: "+Dquery); 

     //execute the query, and get a java resultset 
     ResultSet rs = st.executeQuery(); 

     //iterate through the java resultset 
     while (rs.next()) 
     { 
      String id = rs.getString(Column1); 
      String firstName = rs.getString(Column2);/* 
      String lastName = rs.getString(Column3); 
      String dateCreated = rs.getString(Column4); 
      int isAdmin = rs.getInt (Column5);*/ 

      //print the results 
      System.out.println(id+"|\t"+firstName/*+"|\t\t"+lastName+"|\t\t"+dateCreated+"|\t"+isAdmin*/); 
     } 
     st.close(); 


    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

我不能在准备的语句中插入“lmgs_Book”字符串。

+0

删除php标签请 –

+0

“我不能在准备的语句中插入”lmgs_Book“字符串。” ?它会抛出一些错误吗? –

+1

如果你只是要使用字符串,它看起来并不需要'setString()'。 – bmarkham

回答

2

准备好的语句是针对不是表名的列值。

但是,您可以使用占位符代替表名,然后用您的表名替换 。

String Dquery = ("SELECT * FROM $tableName"); 
Dquery = Dquery.replace("$tableName","lmgs_Book"); 
PreparedStatement st = connect.prepareStatement(Dquery); 

Remove this: 
st.setString(1, "lmgs_Book"); 

注意:

,什么是优势相比

String Dquery = "SELECT * FROM lmgs_Book";[推荐]

答:没有任何优势可言。如果您在上面的表名中使用占位符,则可能会带来潜在的危害。

(特别是因为你不应该使用变量替换呼叫 ,而不是字面的,因为这可能使语句弱势 SQL注入)

+0

是的,你是对的。根本没有优势。但我只想让问题所有者认识到使用准备好的陈述。 @AndreasFester – 1000111

+0

并感谢您的宝贵意见。我会把这个评论放在我的文章的** Caution **部分。再次感谢@AndreasFester – 1000111

0

试试这个,请确保您的queryStringcolumn Name必须是您的database中的varchar。

String Dquery = ("SELECT * FROM tablename where column_name =?"); 

    //create the java statement 
    PreparedStatement st = connect.prepareStatement(Dquery); 
    st.setString(1, "lmgs_Book"); //this line will be set Imgs Books as search Parameter.