Mysql select JAVA语句编写准备
问题描述:
这是我目前的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”字符串。
答
准备好的语句是针对不是表名的列值。
但是,您可以使用占位符代替表名,然后用您的表名替换 。
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注入)
答
试试这个,请确保您的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.
删除php标签请 –
“我不能在准备的语句中插入”lmgs_Book“字符串。” ?它会抛出一些错误吗? –
如果你只是要使用字符串,它看起来并不需要'setString()'。 – bmarkham