如何通过jdbc java添加sql参数化查询

时间:2018-04-09 06:44:08

标签: java jdbc

我必须开发一个参数化的sql staement,如下所示

select * from tablename where cid = cid

以下是调用方法的其余服务,以便用户传递输入参数,如tablename和cid以及它的基础 将转到数据库和该特定表,并将检索coulmn值,所以下面的代码现在在下面的代码请告知 如何更改sql语句进行参数化,以便它将根据用户输入的cid从表中检索值

public String retriveData(@QueryParam("tablename") String tablename,@QueryParam("cid") String cid ) throws SQLException
    {
        Connection con=null;
        PreparedStatement ps=null;
        String statement="";
        String retString="";

        try {
            //Class.forName("com.mysql.jdbc.Driver");
            //put sql jdbc jar in tomcat lib
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  

            con=DriverManager.getConnection("jdbc:sqlserver://xxx:1111; databaseName=aaa", "rr","vvv");
            con.setAutoCommit(false);



            System.out.println("FROM TABLE NAME : "+tablename);// ***** need to be parametrized query basis on the cid ******
                    statement="SELECT * FROM "+tablename+";";// ***** need to be parametrized query basis on the cid ********

            System.out.println("STATEMENT : "+statement);
            ps=con.prepareStatement(statement);
            // Turn use of the cursor on.
            //ps.setFetchSize(50);
            ps.setMaxRows(10);
            ResultSet rs=ps.executeQuery();
            ResultSetMetaData rsmd=rs.getMetaData();
            String name=rsmd.getColumnName(5);
            while(rs.next())
            {

                retString=retString+name+" : "+rs.getString(name)+"<br>";
                System.out.println(retString);

            }

2 个答案:

答案 0 :(得分:2)

你做不到。您需要使用字符串连接/占位符和String.format构造sql。预准备语句用于列值而不是表名。

资料来源:Screenshot

How to use a tablename variable for a java prepared statement insert

答案 1 :(得分:0)

我不确定您为什么要对表名进行参数化。 但是通过使用如下所示的准备语句,参数化cid是可以的。

statement="SELECT * FROM " + tablename + " where cid = ?";

preparedStatement.setInt(1, cid);

如果你想通过cid过滤来检索特定表中的值,那我就是答案。