Mysql在JAVA中选择准备语句

时间:2016-03-08 06:00:16

标签: java mysql

这是我目前的java程序。我需要制作一个准备好的语句并连接到MySql数据库。

 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”字符串插入预处理语句中。

2 个答案:

答案 0 :(得分:2)

  

Prepared语句用于列值而非表名。

     

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

 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注入)

答案 1 :(得分:0)

试试这个,请确保queryString column 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.