天道酬勤,学无止境

prepared-statement

是否有理由从不关闭 JDBC 连接?(Is there a reason for never closing a JDBC connection?)

问题 我正在阅读最后一位在系统上工作的开发人员的代码,他从未关闭与数据库的任何连接。 他只关闭PreparedStatement和ResultSet连接,但从不关闭 Connection。 系统不使用连接池。 是否有任何理由不关闭所有内容( Connection 、 PreparedStatement和ResultSet )? 回答1 这没有充分的理由,它会导致应用程序非常脆弱。 如果出现网络问题或数据库在一段时间内没有响应,数据库连接很容易失效,并且依赖于单个现有连接,不重新启动应用程序就无法恢复。 这还有其他不好的地方。 例如,通常连接是同步的,因此如果以这种方式构建具有多个并发用户的 Web 应用程序,则会限制应用程序的并发性。 但是,您的应用程序无法从瞬态问题中恢复,足以让这个问题值得修复。 回答2 Connection 的文档说明它扩展了AutoCloseable. AutoCloseable 的文档指出,当类是“不再需要时必须关闭的资源”时,类会扩展它。 它提供了一个 Close 方法,你的朋友应该使用它。 ResultSet还扩展了AutoCloseable ,但PreparedStatement没有。 回答3 他很可能使用同一个连接来完成所有 SQL 处理。 这不是一个糟糕的技术。 但是,如果他没有编写干净关闭的代码,那么可能很难知道何时关闭唯一的连接。

2021-11-28 13:38:10    分类:技术分享    java   jdbc   prepared-statement

MySQLI 准备好的语句:num_rows & fetch_assoc(MySQLI Prepared Statement: num_rows & fetch_assoc)

问题 下面是一些写得不好且被严重误解的 PHP 代码,没有错误检查。 老实说,我在 PHP->MySQLi 函数的迷宫中有点挣扎! 有人可以提供一个示例,说明如何使用准备好的语句在关联数组中收集结果,同时还从 $stmt 获取行数? 下面的代码是我正在玩的。 我认为让我失望的一点是在store_result之后使用$stmt值,然后尝试收集一个 assoc 数组,我不太确定为什么...... $mysqli = mysqli_connect($config['host'], $config['user'], $config['pass'], $config['db']); $stmt = $mysqli->prepare("SELECT * FROM licences WHERE generated = ?"); $stmt->bind_param('i', $core['id']); $result = $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows >= "1") { while($data = $result->fetch_assoc()){ //Loop through results here $data[] } }else{ echo "0 records found"; }

2021-11-28 05:33:01    分类:技术分享    php   mysqli   prepared-statement   fetch   associative-array

如何在 php 中使用 bind_result() 而不是 get_result()(How to use bind_result() instead of get_result() in php)

问题 我正在为 uni 开发一个项目,并且一直在testing server上使用以下代码从基于user_id的表中get all devices : public function getAllDevices($user_id) { $stmt = $this->conn->prepare("SELECT * FROM devices WHERE primary_owner_id = ?"); $stmt->bind_param("i", $user_id); $stmt->execute(); $devices = $stmt->get_result(); $stmt->close(); return $devices; } 这在我的测试服务器上运行良好,但在迁移到大学项目服务器时返回此错误: Call to undefined method mysqli_stmt::get_result() 一些谷歌搜索建议使用bind_result()而不是get_result()但我不知道如何在表中的all fields中执行此操作。 大多数示例只显示返回one field 任何帮助将非常感激 回答1 假设您不能使用get_result()并且您想要一组设备,您可以这样做: public function getAllDevices($user_id) { $stmt = $this-

2021-11-28 05:23:53    分类:技术分享    php   mysql   sql   mysqli   prepared-statement

JDBC 中的 Java 类型到 Postgres ltree(Java type in JDBC to Postgres ltree)

问题 有谁知道什么 Java 类型映射到 Postgres ltree 类型? 我创建了一个像这样的表: CREATE TABLE foo (text name, path ltree); 几个插入: INSERT INTO foo (name, path) VALUES ( 'Alice', 'ROOT.first.parent'); INSERT INTO foo (name, path) VALUES ( 'Bob', 'ROOT.second.parent'); INSERT INTO foo (name, path) VALUES ( 'Ted', 'ROOT.first.parent.child'); INSERT INTO foo (name, path) VALUES ( 'Carol', 'ROOT.second.parent.child'); 没有什么奇怪的。 现在我想使用 PreparedStatment 进行批处理: public final String INSERT_SQL = "INSERT INTO foo( name, path) VALUES (?, ?)"; public void insertFoos(final List<Foo> foos) { namedParameterJdbcTemplate.getJdbcOperations()

2021-11-28 00:43:43    分类:技术分享    java   postgresql   jdbc   prepared-statement   ltree

将表名作为准备好的语句的参数传递[重复](Passing table name as parameter of prepared statement [duplicate])

问题 这个问题在这里已经有了答案: 使用准备好的语句设置表名(7 个回答) 5年前关闭。 我正在尝试学习如何在 Java 中使用 MySQL,正如标题所说,我在准备语句时遇到了问题。 我有一个名为 temp 的 MySQL 表,其中包含值(直接从 MySQL 控制台输出): mysql> select * from temp; +------+-----------------------------------------------+ | id | value | +------+-----------------------------------------------+ | 1 | this is a first item | | 2 | this is the second item | | 3 | This is the third item and slightly redundant | +------+-----------------------------------------------+ 3 rows in set (0.00 sec) 在 Java 中,我像这样访问数据库: stmt = conn.prepareStatment("select * from ?"); stmt.setString(1,"temp"); ResultSet rs =

2021-11-28 00:07:31    分类:技术分享    java   mysql   sql   prepared-statement

JDBC - How to set char in a prepared statement

I cannot find any method like char c = 'c'; preparedStatement.setChar(1, c); How to set character to a prepared statement?

2021-11-27 21:50:00    分类:问答    java   jdbc   prepared-statement

Using prepared statements with JDBCTemplate

I'm using the JDBC template and want to read from a database using prepared statements. I iterate over many lines in a .csv file, and on every line I execute some SQL select queries with corresponding values. I want to speed up my reading from the database but I don't know how to get the JDBC template to work with prepared statements. There is the PreparedStatementCreator and the PreparedStatementSetter. As in this example both of them are created with anonymous inner classes. But inside the PreparedStatementSetter class I don't have access to the values I want to set in the prepared statement

2021-11-27 12:11:40    分类:问答    java   spring   jdbc   prepared-statement   jdbctemplate

INSERT several rows with a prepared statement in a loop

Sqlserv php error when inserting using array portion ARRAY PREPRATION foreach ($data as $rs) { $params []="({$rs->hd},'{$rs->dvn}',{$rs->mth},{$rs->yr},{$rs->stid},{$rs->prcd},'{$rs->prnm}',{$rs->prte},{$rs->ssl},{$rs->clsk},1)"; } INSERT INTO STATEMENT: $SqlInsert="insert into SQl_test (Ss_Hq_cd,Ss_division,Ss_month,Ss_yr,Ss_stk_Id,Ss_prod_cod,Ss_prod_name,ss_prod_rate,Ss_Sale,Ss_Cl_stk,ss_tran_stat) values(?,?,?,?,?,?,?,?,?,?,?) "; $stmt = sqlsrv_query( $conn, $SqlInsert,$params); EROOR: Error in statement preparation/execution.\n" Array ( [0] => Array ( [0] => 22018 [SQLSTATE] => 22018 [1]

2021-11-27 08:29:44    分类:问答    php   loops   prepared-statement   sql-insert   sqlsrv

PHP 准备语句 - 检查一个值是否已经存在(PHP prepared statements - check if a value already exists)

问题 我正在尝试检查一个值(电子邮件),以确定它是否已存在于数据库中。 这应该使用准备好的语句来完成。 这样做的最佳方法是什么? 我的解决方案是这样的(这是错误的): $mysqli = connectToDB(); $getEmail = $mysqli->prepare('SELECT * FROM users WHERE email=?') or die('Couldn\'t check the email'); $getEmail->bind_param('s', $email); $getEmail->execute(); $countRows = $getEmail->num_rows; print $countRows; 即使电子邮件区域存在于数据库中,它也始终打印出 0。 回答1 你需要调用$getEmail->store_result(); $mysqli = connectToDB(); $getEmail = $mysqli->prepare('SELECT * FROM users WHERE email=?'); $getEmail->bind_param('s', $email); $getEmail->execute(); $getEmail->store_result(); $countRows = $getEmail->num_rows

2021-11-27 07:12:11    分类:技术分享    php   mysqli   prepared-statement

C# 等价于 java 准备好的语句(C# equivalent to java prepared statement)

问题 我正在尝试在 c# 中创建一个准备好的语句。 出于某种原因,我尝试的一切都以例外告终。 这是我现在的代码: using (OracleCommand cmd = new OracleCommand()) { cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "insert into daily_cdr_logs " + "(message) " + "values " + "(:message)"; cmd.Parameters.Add(:message, msg); //OracleDbType.Int32, postpaid_duration, ParameterDirection.Input); cmd.Prepare(); cmd.ExecuteNonQuery(); } 我得到豁免:“由于对象的当前状态,操作无效。” 回答1 典型的 Oracle 准备语句如下所示。 (请注意,只有准备好的语句中的定义有:冒号,而cmd.Parameters.AddWithValue调用中的没有) String msg = "something here"; using (OracleConnection con = new OracleConnection(...insert

2021-11-27 04:04:02    分类:技术分享    c#   sql   oracle   prepared-statement