标签: prepared-statement

Python支持MySQL预处理语句吗?

我之前参与过一个PHP项目,其中准备好的语句使SELECT查询的速度提高了20%.

我想知道它是否适用于Python?我似乎无法找到任何明确表示它做或不做的事情.

python mysql prepared-statement

47
推荐指数
5
解决办法
5万
查看次数

如何在PreparedStatement中处理(可能)空值?

声明是

SELECT * FROM tableA WHERE x = ?
Run Code Online (Sandbox Code Playgroud)

并通过java.sql.PreparedStatement'stmt'插入参数

stmt.setString(1, y); // y may be null
Run Code Online (Sandbox Code Playgroud)

如果y为null,则语句在每种情况下都不返回任何行,因为x = null它始终为false(应该是x IS NULL).一个解决方案是

SELECT * FROM tableA WHERE x = ? OR (x IS NULL AND ? IS NULL)
Run Code Online (Sandbox Code Playgroud)

但后来我必须设置两次相同的参数.有更好的解决方案吗?

谢谢!

java null prepared-statement

46
推荐指数
3
解决办法
3万
查看次数

在PreparedStatement中使用setDate

为了使我们的代码更加标准化,我们被要求将我们将SQL变量硬编码的所有位置更改为预处理语句并改为绑定变量.

然而,我面临着一个问题setDate().

这是代码:

        DateFormat dateFormatYMD = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        DateFormat dateFormatMDY = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        Date now = new Date();
        String vDateYMD = dateFormatYMD.format(now);
        String vDateMDY = dateFormatMDY.format(now);
        String vDateMDYSQL =  vDateMDY ;
        java.sql.Date date = new java.sql.Date(0000-00-00);

   requestSQL = "INSERT INTO CREDIT_REQ_TITLE_ORDER (REQUEST_ID," + 
                " ORDER_DT, FOLLOWUP_DT) " +  "values(?,?,?,)";


                prs = conn.prepareStatement(requestSQL);

                prs.setInt(1,new Integer(requestID));

                prs.setDate(2,date.valueOf(vDateMDYSQL));
                prs.setDate(3,date.valueOf(sqlFollowupDT));
Run Code Online (Sandbox Code Playgroud)

SQL执行时出现此错误:

    java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Date.java:138)
    at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)
Run Code Online (Sandbox Code Playgroud)

我应该使用setString(),而不是用to_date()

java sql oracle jdbc prepared-statement

45
推荐指数
2
解决办法
19万
查看次数

问号在SQL查询中表示什么?

在浏览一些SQL书籍时,我发现示例往往?在查询中使用问号().它代表什么?

sql prepared-statement

43
推荐指数
3
解决办法
8万
查看次数

使用PDO准备好插入后获取最后一个插入ID

我正在将PHP PDO和PostgreSQL用于一个新项目.

给定以下函数,如何返回刚刚插入的行的id?它现在的样子不起作用.

function adauga_administrator($detalii) {
    global $db;
    $ultima_logare = date('Y-m-d');

    $stmt = $db->prepare("INSERT INTO site_admins (sa_nume, sa_prenume, sa_user_name, sa_password, sa_email, sa_id_rol, sa_status, sa_ultima_logare) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bindParam(1, $detalii['nume']);
    $stmt->bindParam(2, $detalii['prenume']);
    $stmt->bindParam(3, $detalii['username']);
    $stmt->bindParam(4, md5(md5($detalii['parola'] . SIGURANTA_PAROLE) . SIGURANTA_PAROLE));
    $stmt->bindParam(5, $detalii['email']);
    $stmt->bindParam(6, $detalii['rol'], PDO::PARAM_INT);
    $stmt->bindParam(7, $detalii['status'], PDO::PARAM_INT);
    $stmt->bindParam(8, $ultima_logare);    
    $stmt->execute(); 

    $id = $db->lastInsertId();
    return $id;
}
Run Code Online (Sandbox Code Playgroud)

php postgresql pdo prepared-statement

41
推荐指数
2
解决办法
7万
查看次数

如何为java预处理语句插入使用tablename变量

我正在使用java PreparedStatment对象来构造一系列批量INSERT查询.查询语句的格式是......

String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
Run Code Online (Sandbox Code Playgroud)

...所以字段值和表名都是变量(即,我有多个具有相同列格式的表,其中每个插入将指向不同的一个).如果删除"?",我可以让执行工作 tablename变量和硬代码,但每个预处理语句将被插入到不同的表中,因此需要保留一个变量,我在执行批处理查询之前立即填充...

stmt.setString(1, "tableName1");
Run Code Online (Sandbox Code Playgroud)

我怎么能让这个变成动态变量呢?

java sql variables dynamic prepared-statement

41
推荐指数
2
解决办法
6万
查看次数

如何使用Java preparedStatement将JSON对象插入Postgres?

我正在努力将JSON对象插入到postgres v9.4 DB中.我已将名为"evtjson"的列定义为类型json (不是jsonb).

我试图在Java(jdk1.8)中使用预准备语句将Json对象(使用JEE javax.json库构建)插入到列中,但是我一直遇到SQLException错误.

我使用以下方法创建JSON对象:

JsonObject mbrLogRec = Json.createObjectBuilder().build();
…
mbrLogRec = Json.createObjectBuilder()
                .add("New MbrID", newId)
                .build();
Run Code Online (Sandbox Code Playgroud)

然后我将此对象作为参数传递给另一个方法,以使用预准备语句将其写入DB.(以及其他几个领域)作为:

pStmt.setObject(11, dtlRec);
Run Code Online (Sandbox Code Playgroud)

使用此方法,我收到以下错误:

org.postgresql.util.PSQLException:未安装hstore扩展.at org.postgresql.jdbc.PgPreparedStatement.setMap(PgPreparedStatement.java:553)at org.postgresql.jdbc.PgPreparedStatement.setObject(PgPreparedStatement.java:1036)

我也尝试过:

pStmt.setString(11, dtlRec.toString());
pStmt.setObject(11, dtlRec.toString());
Run Code Online (Sandbox Code Playgroud)

哪会产生不同的错误:

事件JSON:{"New MbrID":29}

SQLException:错误:列"evtjson"的类型为json,但表达式的类型为字符变化

提示:您需要重写或转换表达式.

但是,至少这告诉我DB正在将列识别为JSON类型.我确实尝试安装hstore扩展,但它告诉我它不是一个hstore对象.

OracleDocs显示了许多用于在preparedStatement中设置参数值的方法,但如果有人知道答案,我宁愿不尝试所有方法.(http://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html)这些还引用了一个额外的参数,SQLTYPE,但我不能找到这些任何引用.

我应该试试setAsciiStream吗?CharacterStream?CLOB?

java postgresql json prepared-statement

39
推荐指数
5
解决办法
4万
查看次数

使用预准备语句的变量列名称

我想知道是否还有使用预准备语句指定返回的列名.

我正在使用MySQL和Java.

当我尝试它:

String columnNames="d,e,f"; //Actually from the user...
String name = "some_table"; //From user...
String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?";//...
stmt = conn.prepareStatement(query);
stmt.setString(1, columnNames);
stmt.setString(2, "x");
Run Code Online (Sandbox Code Playgroud)

我得到这种类型的声明(在执行之前打印).

SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
Run Code Online (Sandbox Code Playgroud)

不过我想看到:

SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
Run Code Online (Sandbox Code Playgroud)

我知道我不能这样做表名,正如这里讨论的那样 ,但是想知道是否有某种方法可以为列名做这些.

如果没有,那么我将只需要尝试确保我清理输入,这样就不会导致SQL注入漏洞.

java sql jdbc prepared-statement

38
推荐指数
3
解决办法
4万
查看次数

使用PHP,MySQLi和Prepared Statement,我如何返回插入行的id?

我想检索数据库中插入行的id,但我不知道如何做到这一点.

我试图使用SQL子句返回RETURNING id,但不起作用.

如何在插入行后返回id?

php mysql mysqli prepared-statement

36
推荐指数
3
解决办法
3万
查看次数

Java PreparedStatement检索最后插入的ID

这种方式对这个问题的答案似乎很难在互联网上找到.基本上我使用PreparedStatement将值插入MySQL数据库.我使用PreparedStatement来转义数据以防止SQL注入攻击.问题是,现在有办法撤回这些密钥.

String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
PreparedStatement prest;
prest = con.prepareStatement(query);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能逃避输入并在Java中使用PreparedStatements?

java mysql jdbc prepared-statement

35
推荐指数
2
解决办法
4万
查看次数

标签 统计

prepared-statement ×10

java ×6

sql ×4

jdbc ×3

mysql ×3

php ×2

postgresql ×2

dynamic ×1

json ×1

mysqli ×1

null ×1

oracle ×1

pdo ×1

python ×1

variables ×1