Tag: prepared statement

如何动态创建预准备语句 – 并重新使用查询

例如,我一直在尝试创建一个处理来自不同类的查询的类,这些类创建不同的对象。 Class Employees, Class Customers, Class Sales 我想通过从JTextField值派生的构造函数传递SQL查询(到查询类“数据库”)。 例如,来自两个不同的类: new Database (SELECT PRODUCT FROM SALES WHERE DATE = YESTERDAY); new Database (SELECT FULLNAMES FROM CUSTOMER WHERE ADDRESS = NEWYORK); 我面临的问题是动态创建以下项目(PreparedStatement Parameters): stmt.setString(2, NEWYORK); 所以“sql”在“?” 可以填充: String sql = “SELECT FULLNAMES FROM CUSTOMER WHERE ADDRESS = ?”; 在我的项目中,可能有一个语句将值传递给参数,如上所述,或者可能有更多参数,意味着更多语句,因此上述内容无法重用。 任何人都可以有关于如何生成“stmt.setString(2,NEWYORK);”的想法 动态地,以便我可以根据传递的参数数量动态生成它。 所以我可以举例说: stmt.setString(1, NEWYORK); stmt.setString(2, FULLNAMES); stmt.setString(3, […]

使用jdbc通过PrepareStatement为DATETIME字段插入null

我想通过PrepareStatement使用JDBC(使用Mysql数据库)将空值插入DATETIME字段我尝试了以下方法,但没有任何工作。 我有一个方法“Util.dateconvertdate”,它用于将输入日期转换为格式化的字符串类型 public static String dateconvertdate(Timestamp timestamp) { Date date=null; String formattedDate=””; if(timestamp != null){ SimpleDateFormat sdf = new SimpleDateFormat(“dd-MMM-yyyy hh:mm:ss”); SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”); Date date1 = new java.util.Date(timestamp.getTime()); formattedDate = formatter.format(date1); } else return “NULL”; return formattedDate; } 我用它来检查它是否返回null或日期 if(Util.dateconvertdate(rs.getTimestamp(“fld_dob”)) !=null){ pmystmt.setString(17, (Util.dateconvertdate(rs.getTimestamp(“fld_dob”)))); } else{ pmystmt.setNull(17, java.sql.Types.NULL); } 我尝试过 pmystmt.setNull(17, java.sql.Types.DATE); […]

将参数传递给方法时,将标记查询强制为sqlInjection

我们的数据库层中有一个方法,如下所示: public List getNamesFromId(List idsList){ StringBuilder query = new StringBuilder(); query.append(“Select first_name from person where id in (“); for (int pos = 0; pos < idsList.size(); pos++) { query.append("?"); query.append(","); } query.deleteCharAt(query.length() – 1).append(")"); try { conn = establishConnection(); pstmt = conn.prepareStatement(query.toString()); for (int i = 0; i < selections.size(); i++) { pstmt.setLong(i + 1, […]

如何有效地使用PreparedStatement?

我喜欢使用DAO模式,并且有一个类可以为特定的表和JPA实体执行所有SQL请求。 我有例如: public class MyDao { @PersistenceContext(name = “mycontext”) private EntityManager entityManager; public List find(String code) { return getEntityManager() .createQuery(“FROM MyEntity e WHERE e.code = :code”) .setParameter(“code”, code) .getResultList(); } } 但我也知道我们可以使用静态方法直接在实体类上使用命名查询(我不喜欢这种方式): @Entity @Table @NamedQueries({ @NamedQuery(name = “find”, query = “FROM MyEntity e WHERE e.code = :code”) }) public class MyEntity { … public static […]

有关addBatch(String)的注意事项

在PreparedStatement的addBatch()方法addBatch(String) , Statement类中还有一个addBatch(String)方法。 我想处理一系列不同的sql语句,我正在寻找一些关于addBatch(String)意味着性能的澄清。 使用此方法是安全(和快速)还是更好地在Java中对类似的sql语句进行分组并在组中执行它们?

如何将ascii流绑定到预准备语句

我正在测试官方teradata网站上的 fastload示例代码。 为了谨慎起见,我使用样本上的FastLoad1.csv样本FastLoad1.csv在这里 当我运行此示例代码时,我在此行中收到错误 pstmtFld.setAsciiStream(1, dataStream, -1); // This method is not implemented setAsciiStream如何与预准备语句一起使用? 我正确使用setAsciiStream吗? 这是控制台中的错误消息 Attempting connection to Teradata with FastLoadCSV. Connection to Teradata with FastLoadCSV established. Creating a PreparedStatement object with FastLoadCSV. Created a PreparedStatement object with FastLoadCSV. Checking connection for warnings Streaming FastLoad1.csv SQL State = HY000, Error Code = 1151 com.teradata.jdbc.jdbc_4.util.JDBCException: […]

不关闭我的JDBC PreparedStatements会导致内存泄漏吗?

我正在使用java.sql PreparedStatements,我想知道以下内容: 在Java中是Pass-by-Value,Dammit! ,以下是Java的Pass-By约定的示例: public void foo(Dog d) { d = new Dog(“Fifi”); // creating the “Fifi” dog } Dog aDog = new Dog(“Max”); // creating the “Max” dog // at this point, aDog points to the “Max” dog foo(aDog); // aDog still points to the “Max” dog 在我的代码中,这出现如下(半Java伪代码): public void method() { PreparedStatement pstmt […]

Java不运行带参数的prepare语句

我正在使用PreparedStatement查询我的表。 不幸的是,我无法这样做。 我的代码就像这样简单: PreparedStatement preparedStatement = connection.prepareStatement( “Select favoritefood from favoritefoods where catname = ?”); preparedStatement.setString(1, “Cappuccino”); ResultSet resultSet = preparedStatement.executeQuery(); 抛出的错误是java.sql.SQLException: ORA-00911: invalid character 。 好像它永远不会通过给定的参数运行。 谢谢你的时间。 我花了一天时间来调试这个但仍然不成功。 如Piyush所述,如果我在语句结尾处省略分号,则会抛出新错误。 java.sql.SQLException: ORA-00942: table or view does not exist 。 但我可以向你保证,这张桌子确实存在。 UPDATE 射击。 我编辑了错误的sql。 现在它成功了。 你的时间。

使用PreparedStatement将日期插入MySQL数据库

我想使用预准备语句将字符串日期更新到MySQL数据库中。 我已经尝试了很多并且总是得到错误java.util.Date cannot parse into java.sql.Date或反之亦然。 我没有在这里import任何东西。 请根据您的回答导入。 public class Date1 { public static void main(String args[]) { String source=”2008/4/5″; SimpleDateFormat format = new SimpleDateFormat(“dd/MM/yyyy”); java.sql.Date d=(Date) format.parse(source); Class.forName(“com.mysql.jdbc.Driver”); Connection con=(Connection) DriverManager.getConnection(“jdbc:mysql://localhost:3306/employee”, “root”, “root”); PreparedStatement ps=con.prepareStatement(“insert into ankur1 values(?)”); ps.setDate(1,(java.sql.Date) d); ps.executUpdate(); } }

我如何做好准备好的陈述?

我怎样才能准备好这个呢? Statement stmt = con.createStatement(); long lastid = getLastId(stmt); // create a SQL query String strQuery = “INSERT INTO studenten ” + ” (id, naam, adres, postcode, plaats, geboren) ” + ” VALUES (” + (lastid+1) + “,” + “‘” + contact.getNaam() + “‘,” + “‘” + contact.getAdres() + “‘,” + “‘” + contact.getPostcode() + […]