如何在使用JDBC的SELECT查询中使用动态表名 [英] How to use dynamic table name in SELECT query using JDBC

查看:957
本文介绍了如何在使用JDBC的SELECT查询中使用动态表名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我的语法我喜欢这个

  String sql2 =SELECT * FROM?WHERE Patient_ID =?; 

pst = conn.prepareStatement(sql2);

System.out.println(SQL before values is set+ sql2);
System.out.println(TestPrint阶段1中接收到的表/测试名称的值+ tblName);
System.out.println(TestPrint阶段1中接收的测试名称的值+键);
//值正确输出,但未在查询中设置

pst.setString(1,tblName);
pst.setLong(2,key);
ResultSet rs2 = pst.executeQuery(sql2);

while(rs2.next()){

String ID = rs2.getString(ID);

jLabel35.setText(ID);
jLabel37.setText(ID);
jLabel38.setText(ID);
//他们打印命令被启动以打印面板
}

问题是当我运行这个我收到一个错误说.....你有和SQL语法错误附近?WHERE Patient_ID =?



当我输出sql使用system.out.println(sql2);



值不在sql2中设置

解决方案

当您准备一个语句时,数据库构造一个执行计划,如果该表不存在则无法执行。换句话说,放样器只能用于,而不能用于对象名称或保留字。在这种情况下,您必须依靠Java构造字符串:

  String sql =SELECT * FROM` + tblName +WHERE Patient_ID =?; 

pst = conn.prepareStatement(sql);
pst.setLong(1,key);
ResultSet rs = pst.executeQuery(sql);


I have 5 or table table to query from \

my syntax i like this

String sql2 = "SELECT * FROM ? WHERE Patient_ID = ?";

pst = conn.prepareStatement(sql2);

        System.out.println("SQL before values are set "+sql2);
        System.out.println("The values of table/test name recieved in TestPrint stage 1 "+tblName);
        System.out.println("The values of test name recieved in TestPrint stage 1 "+key);
        // values are outputted correctly but are not getting set in the query

        pst.setString(1, tblName);
        pst.setLong(2, key);
ResultSet rs2 = pst.executeQuery(sql2);

        while(rs2.next()){

            String ID = rs2.getString("ID");

            jLabel35.setText(ID);
            jLabel37.setText(ID);
            jLabel38.setText(ID);
       // them print command is initiated to print the panel
}

The problem is when i run this i get an error saying ".....you have and error in SQL syntax near ? WHERE Patient_ID = ?"

When i output the sql using system.out.println(sql2);

values are not set in sql2

解决方案

When you prepare a statement, the database constructs an execution plan, which it cannot do if the table is not there. In other words, placehodlers can only be used for values, not for object names or reserved words. You'd have to rely on Java to construct your string in such a case:

String sql = "SELECT * FROM `" + tblName + "` WHERE Patient_ID = ?";

pst = conn.prepareStatement(sql);
pst.setLong(1, key);
ResultSet rs = pst.executeQuery(sql);

这篇关于如何在使用JDBC的SELECT查询中使用动态表名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆