2017-03-01 5 views
0

ここには多くの類似の質問がありますが、この質問に具体的に答えるものはありません。 Javaブール値からmySQLデータベースで使用可能な形式に変換する方法を教えてください。私はいくつかの異なることを試して、ここでいくつかの同様の問題を読むが、何も動作していない。ここに詳細があります:JDBCはブール型のmySQLに互換性のあるブール型に変換されます

私はmySQLデータベースを持っています。私はそれをmySQLワークベンチで構築しました。 true/falseの値に 'Boolean'というデータ型を指定することができました。これは1/0で表されます。私は、サイズが1バイトの小さなものがあることを認識しています。

JDBCを使用して、Javaでデータベースのインタフェースを構築しています。データベースの各テーブルには、テーブルデータのインスタンスを作成するための対応するJava Beanクラスと、プログラムとデータベース間を行き来するためのコードを含むtableManagerクラスがあります。

プログラムにはGUIもあります。 GUIには3つのチェックボックスがあります。私はcheckBox.isSelected()を使用して、チェックボックスの状態を検出します。ボタンが押された時点でこれは 'true'または 'false'の値を返します。これは、対応するJava Beanクラスのブール値を設定するために使用されます。 GUIで

:たとえば、私は「もののBeanクラスの値が設定されている

public static boolean update(Person bean) throws Exception { 
    String sql = "Update peopleTable SET name = ? new_contact = ? WHERE person_id = ?"; 
    try(
    PreparedStatement stmt = conn.prepareStatement(sql);) { 
    stmt.setString(1, bean.getPersonName()); 
    stmt.setBoolean(2, bean.getIsPersonNewContact()); 
    stmt.setInt(3, bean.getPersonID()); 

...The rest of the try/catch statement and exception handling stuff 
} 

マネージャクラスで

private void updateContactActionPerformed (java.awt.event.ActionEvent evt) { 
    Person bean = new Person(); 
    bean.setPersonID(Integer.parseInt(labelPid.getText()); 
    bean.setPersonName(textfield.getText()); 
    bean.setIsPersonNewContact(checkBoxContact.isSelected()); 
    Boolean update = PeopleManager.update(bean); //pass the bean to the manager class 
} 

...ブールですまた、それをブール値に変更しようとしましたが、それは助けにはなりませんでした。

他のスタックポストから私が信じることは、PreparedStatement.setBoolean()メソッドが 'true'/'false'の値を1または0に変換する処理を行うということです。これは私のためには機能しませんでした。そこで私は2つの異なる方法を試してみました。最初は、真の偽値を値1または0のIntに変換し、それを渡すことでした。これは機能しませんでした。これはおそらく、intが1バイトよりも大きかったためです。だから私はこのようにバイトに変換しようとしました:

stmt.setByte(2, (byte) booleanToByte(bean.getIsPersonNewContact())); 

それもうまくいきませんでした。私はエラーメッセージを表示して印刷していますが、あまり明らかにはなりません。文字列と日付の値を取得してデータベースに入れることができるので、接続自体ではありません。私がやろうとしていることを達成するための簡単な方法がなければならないと確信しています。誰かが私を啓発できますか?

**UPDATE** 

以下の提案に基づいて、私は文字列にデータベースタイプを変更して、私のコード内の文字列やブール値の間で前後に変換を処理する方法に手紙を書いた:

//Convert Boolean to string 
    private String booleanToString(Boolean b){ 
    if(b){ 
     String t = "true"; 
     return t; 
    } 
    else { 
     String f = "false"; 
     return f; 
    } 
} 

//convert String to Boolean 
private Boolean stringToBoolean(String s) { 
    if (s == "true") { 
     Boolean t = true; 
     return t; 
    } 
    else { 
     Boolean f = false; 
     return f; 
    } 
} 

その後、I私の周りのラッパーとしてこれらを使用しました。たとえば、コードは次のようにヘルプはこれを解決するための

bean.setIsPersonNewContact(booleanToString(checkBoxContact.isSelected())); 

感謝を!

+0

Iは、[コネクタ/ Jのコード(https://github.com/mysql/mysql-connector-j/blob/release/5.1/src/com/mysql/jdbc/見ればPreparedStatement.java#L2884)これはすでにこれを行うはずです(MySQLの古代版を使用していないか、またはおそらくドライバのものを使用していない限り)。列のデータ型は何ですか?また、ドライバのバージョンは何ですか? –

+0

ありがとうございました。私は見た。私は下の提案に行ったが、あなたの助言に感謝します:) –

答えて

0

文字列の代わりに、ブールにnew_contact設定

  1. あなたのテーブルには、周りの仕事。
  2. stmt。setString(2、Boolean.toString(bean.getIsPersonNewContact()));

あなたが戻ってデータベース

  1. ブールyourBoolean = Boolean.valueOf(resultset.getString( "new_contact"))から文字列を取得します。
+1

ありがとう。素晴らしい提案!私はデータベースの型を変更するあなたの助言に従った。私はメソッドに一つの 'stringToBoolean'と' booleanToString'を書いて、それらを呼び出しの周りのラッパーとして使ってPersonクラスのフィールドを取得して設定しました。 。 –

関連する問題