2010-12-03 1 views
0

私は、MYSQLデータベースを使用して、Javaアプリケーションの永続データを保存しています。どのようにMySQLの文字列をMYSQLデータベースに入力してからもそれらを取得しますか?

CREATE TABLE testtable1(key1a CHAR, key1b CHAR, encoded1a CHAR, encoded1b CHAR); 

ご覧のとおり、各行に4つの異なるCHARが格納されたテーブルを作成します。

私はテーブルに文字を入力環境のために書かれているSQLは

char k1[] = new char[2] 
char p[] = new char[2]; 

k1[0]=0x00aa; 
k1[1]=(char)0xaaaa; 

p[0]=0x0001; 
p[1]=0x0002; 

sql = "INSERT INTO testtable1 " 
       +"(key1a, key1b , encoded1a,encoded1b) " 
       + "VALUES " 
       + "('"+ k1[0] + "'," 
       + "'"+ k1[1] + "'," 
       + "'"+ p[0] + "'," 
       + "'"+ p[1] + "')"; 

私は仕事を思ういけない上記の文です。それは、このような alt text

としてデータをinptsそしてこの alt text

などのデータベースにあなたが見ることができるように、それは?(whatisはこの?)でinputedされていると、最終的な2つの列があります入力されていません。

char変数を格納するときに私の考えが間違っている場所を指摘する人がいます。

また、どのようにデータベーステーブルから文字列を取得できますか?私はこの上に任意の文書を見つけることができないように???

は私がPreparedStatementに探してお勧めします非常に

+0

'CHAR'を保存したいが、javaに' char [] 'があるのはなぜですか? –

+0

この呼び出しはk1 [0]はchar変数を返します。 char配列のインデックス番号に移動し、char変数 – molleman

答えて

3

をお願いします。次のように

例は次のようになります

PreparedStatement ps = nulll; 
try { 
    ps = connection.prepareStatement("INSERT INTO testtable1 (key1a, key1b , encoded1a,encoded1b) VALUES (? ,? ,?, ?)"); 
    for (int i = 1; i <= k.length; i++) { 
     ps.setString(i, "" + k[i]); 
    } 

    ps.executeUpdate(); 
} catch (SQLException) { 
    //Log exception 
} finally { 
    if (ps != null) { 
     try { 
      ps.close(); 
      ps = null; 
     } catch (SQLException e) {} 
    } 
} 

ここで問題char[]kの長さが4より大きい場合、例外がスローされることです。 PreparedStatement答えに加えて

+0

を返します。まず、javaのcharは、範囲[0..255]のバイト値です "いいえ、charは2ですバイト、UTF-16値。 – Powerlord

+0

@R Bemrose、ええ、ありがとう...見つけた...私は私の声明を削除しました。 –

+0

データは?として入力されていますか?まだ、どんなアイデアですか?また、データベースからcharを読み込む方法は? – molleman

2

Javaのcharは、16ビットUTF-16値です。

MySQLのCHARは、CHAR(1) ...と同義です。これは1文字幅です(バイト数はテーブルの文字セットによって異なります)。今

PreparedStatementsetStringあなたのためのエンコーディング変換の世話をするが、それはまだ一つの問題去る必要があります:latin1文字セットにいくつかのシステムのデフォルトにMySQLを。つまり、CHARが小さすぎます。

これに対応する修正があります。

CREATE TABLE testtable1(key1a CHAR, key1b CHAR, encoded1a CHAR, encoded1b CHAR) CHARACTER SET utf8; 

注:表の作成中に、特定の文字セットであることを表に強制することができます。また、utf16の代わりutf8を使用することができます。私はちょうど格納サイズの理由のためにutf8を使用しました。

関連する問題