2016-06-28 6 views
2

私がSQLとJavaとの私の質問があり、ハードな方法を作業する方法を学習しようとしているようですので:出力の引用符で囲まれた変数を使用しますか?

は、引用符の間で変数を使用することが可能ですか?

私はあなたが出力を使用する場合は、次のように仕事ができることを知っている:

System.out.println(_name + " "+_points+ " "+_ID); 

は一重引用符のペアでそれをすべてを作るための方法はありますか?このような 何か:コンパイラは、彼が印刷する必要があり、その変数であることを知っているように、

System.out.println("_name _points _ID"); 

そうであれば、どのように私はそれらをマークしていますか?

私はそれが簡単であるかを知りたい理由は、私がそこに加えサインなし

stmt.executeUpdate("INSERT INTO usertable VALUES("+_name+")"); 

のexecuteUpdate

を使用しようとそれをしたいです。

+0

stmt.executeUpdate( "INSERT INTO usertable VALUES(" + _ name + ")")の問題はありません。 ? –

+3

あなたは 'PreparedStatement'を使うことをお勧めします。サンプル[*** answer is here ***](http://stackoverflow.com/a/11322672/767881) –

+0

[***使用PreparedStatement ***](http://docs.oracle.com/javase /tutorial/jdbc/basics/prepared.html) –

答えて

2

いいえいいえ文字列リテラル内で変数を使用することはできません。しかし、いくつかのオプションがあります。

最初はあなたが現在+記号で連結使用してそれをやっている方法です。もう一つの方法は、String.Formatの

String query = String.format("INSERT INTO table VALUES(%s)", name); 

しかしため優先方法を使用することです

String query = "INSERT INTO table VALUES(" + name + ")"; 

をSQLインジェクション攻撃を回避するSQLは、PreparedStatementを使用しています。

String query = "INSERT INTO table VALUES(?)"; 
PreparedStatement statement = con.prepareStatement(query); 
statement.setString(1, name); 
statement.executeUpdate(); 
0

変数があり、その変数を引用符で渡す場合は、コマンドに引用符を追加するだけです。それは二重引用符(と思うほとんどの場合された)である場合は、スケープする必要が

stmt.executeUpdate("INSERT INTO usertable VALUES('"+_name+"')"); 
               ^
               |_Just add the quotes inside the 
                string 

:引用符は、単一引用符がある場合は、その後、スケープする必要がありますが、それがある場合、あなたゴナ必要としません。次に。 Scapingは、その特定の文字列が

stmt.executeUpdate("INSERT INTO usertable VALUES(\""+_name+"\")"); 
               ^
               |_See the slash before the double quote? 

特別であることをコンパイラに指示する方法である。しかし引用で使用する変数が SQL Injection

にあなたのコードがしやすいようになりますので、あなたは、あなたがそれを行うための適切な方法を学ぶべき学習しているので、

だから、より良い方法は、Prepared Statementsを使用して、あなたの言葉を世話することです。それは次のようになります。

String sql = "INSERT INTO usertable VALUES (?)" 
preparedStatement = dbConnection.prepareStatement(sql); 
preparedStatement.setString(1, "name you want"); 

ここに完全な例を参照してください:http://www.mkyong.com/jdbc/jdbc-preparestatement-example-select-list-of-the-records/

+0

私はOPが文字通りの引用符を必要とするとは思わなかった。 – explv

+0

Hmmm、あなたは正しいと思います。私は彼が@arizzleと誤解しています.PHPのようなことをしたいと思っています。さあ、それは参考にすることができます。私はあなたの答えをupvoted。それを指摘してくれてありがとう。 –

0

あなたはPreparedStatementを使用することができます。

例:

クエリ:

private static String SQL_INSERT_NEW_RULE = "INSERT INTO Table (A, B) VALUES (?, ?)"; 

あなたが置くことができますそれらは次のとおりです:

PreparedStatement pStmt=null; 
pStmt = conn.prepareStatement(SQL_INSERT_NEW_RULE); 
int index = 1; 
pStmt.setString(index++, "value for A"); 
pStmt.setLong(index++, "Value for B"); 
関連する問題