2017-09-01 12 views
2

私は、java 8の新しい異なるパラメータで毎回同じインサート関数を使用できるかどうかを調べようとしています& MySQL。私は以下のPHPコードを持っているとして、それはPHPで可能です知っている:Javaで同じ挿入関数を使用するたびに、異なるパラメータ(キーと値)でMySQLにレコードを挿入することはできますか?

これは配列のレコードです:

$Customer_details=[ 
      'firstname' => $Firstname, 
      'lastname'=> $lastname, 
      'phone' => $phone, 
      'email' => $email, 
      'password'=> $hash 

    ]; 

これはレコードです$ object2はあるクラスのオブジェクトを作成した後:

$object2->insert($pdo,'customer',$Customer_details); 

function insert($pdo, $table, $record) { 
$keys = array_keys($record); 
$values = implode(', ' , $keys); 
$valuesWithColon = implode(', :' , $keys); 
$query = 'INSERT INTO ' . $table . ' (' . $values . ') VALUES (:' . 
$valuesWithColon . ')' ; 
$stmt = $pdo->prepare($query); 
$stmt->execute($record); 
return $stmt; 
} 

は誰もが私だけ表示できます

次のコードは、PHPの挿入機能コードですjavaと同じものの例は、どうですか?

+0

準備文を確認してください。 – lexicore

+0

私はそれを見ましたが、PHPコードの例($ Customer_details)配列で示したようなキーと値の配列を使用する方法があるかどうかはわかりませんでした。 @lexicore –

+0

次に例を示します。https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

答えて

0

はい、あなたは@lexicoreがコメントとほとんど同じようにあなたは、PHPでそれを達成するであろうことを行うことができ、Javaでパラメータ化SQLクエリのための一般的なパターンは、ここでPreparedStatements

は一例で使用することです。..あなただけhttps://alvinalexander.com/java/java-mysql-insert-example-preparedstatement

public void insert(String fname, String lname, Date created, boolean isAdmin, int points) { 
    String myDriver = "org.gjt.mm.mysql.Driver"; 
    String myUrl = "jdbc:mysql://localhost/test"; 
    Class.forName(myDriver); 
    Connection conn = DriverManager.getConnection(myUrl, "root", ""); 

    // create a sql date object so we can use it in our INSERT statement 
    Calendar calendar = Calendar.getInstance(); 
    java.sql.Date startDate = new java.sql.Date(calendar.getTime().getTime()); 

    // the mysql insert statement 
    String query = " insert into users (first_name, last_name, date_created, is_admin, num_points)" 
     + " values (?, ?, ?, ?, ?)"; 

    // create the mysql insert preparedstatement 
    PreparedStatement preparedStmt = conn.prepareStatement(query); 
    preparedStmt.setString (1, fname); 
    preparedStmt.setString (2, lname); 
    preparedStmt.setDate (3, created); 
    preparedStmt.setBoolean(4, isAdmin); 
    preparedStmt.setInt (5, points); 

    // execute the preparedstatement 
    preparedStmt.execute(); 

    conn.close(); 
} 
+0

ありがとうございます。あなたの例では、このコード 'String query ="をユーザ(first_name、last_name、date_created、is_admin、num_points)の値(?、?、?、?、?) ";ちょっと気付いたら、私は望んでいない固定キーを使っています。私は毎回キーを変更できる方法を探しています。 –

+0

固定文字列を変数に置き換えるだけで済むので、コードスニペットで自分の答えを更新しました! –

+0

これは、厳密にはキーと値の数になります。つまり、同じ数の異なるキーと値を同じ関数に送ることができませんでした。したがって、すべての更新ステートメントに対して新しい関数を作成する必要があります。 @stephen –

0

は、私は約一年前にこれを書いた...それはあなたのPHPの例のように再利用可能にするために機能している例のコードをラップする必要があるだろうが、私は、これはあなたが探して何だと思います。

変更するには値List<Objectを入力し、instanceOfのswitch文を使用して解析してください。以前に使用し、これを言及し、第二のループのmake

private String insert(String tableName, List<String> columns, List<String> values){ 
    StringBuilder stringBuilder = new StringBuilder("INSERT INTO " + tableName + " ("); 
    for(String column :columns){ 
     stringBuilder.append(column + ","); 
    } 
    stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); 
    stringBuilder.append(") VALUES ("); 
    for(String value : values){ 
     stringBuilder.append(value + ","); 
    } 
    stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); 
    stringBuilder.append(")"); 
    return stringBuilder.toString(); 
} 

:私が今知っていることを知ることPreparedStatementsで使用するには

for(int z =0; z < columns.size(); z++){ 
    stringBuilder.append("?,"); 
} 

を、私は後者を選ぶだろう。

関連する問題