2012-04-26 10 views
2

どのように私は、エラーを回避するために、次のクエリを再設計することができますこのクエリをどのように再設計できますか?

String sqlQueryToMakeTable = "create table " + UserEmail + 
             "(" + 
              "NameOfThePhoto varchar(255)," + 
              "Caption varchar(255)" + 
             ")"; 
// UserEmail is of type String 

USEREMAILはフォーム[email protected]であり、私はクエリを実行すると、私はこれらのエラーを取得:

java.sql.SQLSyntaxErrorException: Lexical error at line 1, column 18. Encountered: "@" (64), after : "". 
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) 
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) 
at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) 
at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:562) 
at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:255) 
at com.sun.gjc.spi.jdbc40.ConnectionWrapper40.prepareCachedStatement(ConnectionWrapper40.java:52) 
at com.sun.gjc.spi.ManagedConnection.prepareCachedStatement(ManagedConnection.java:964) 
    ..... 

私は例外理由を理解しています。私は二重引用符で電子メールアドレスを配置してこのクエリを直接実行しますが、私はここで何をしますか?

EDIT私はテーブル名に@を使用できませんか?

enter image description here

+5

なぜ地球上であなたは、ユーザーごとにテーブルをしたいですか? !?!? – dagnelies

+0

テーブル名に「@」という文字が本当に必要ですか?なぜUserEmailからこの文字を削除しないのですか? – gefei

答えて

3

ほとんどのデータベースは、あなたが正しい引用符で囲む限り、テーブル名に任意の文字を許可するテーブル名に意味特殊文字を抑制します'table_name'

を必要とMySQLで[table_name]を使用する必要がありますDBのために。例えば、

MySQLの

"create table \"" + UserEmail + "\" " + 

SQL Serverの場合:DB2の場合

"create table `" + UserEmail + "` " + 

それは二重引用符のように見えるダービーについて

"create table [" + UserEmail + "] " + 

はと同じように、うまくいくかもしれませんDB2:http://db.apache.org/derby/docs/10.0/manuals/reference/sqlj08.html

次に、なぜ、各ユーザーのテーブルを作成していますか?

更新通常のアプローチでは、ユーザーを識別するために使用できるいくつかのデータも含まれているキャプションの単一の表があります。例:次に

CREATE TABLE PhotoCaptions (
    UserEmail  varchar(255), 
    NameOfThePhoto varchar(255), 
    Caption  varchar(255) 
) 

、特定のユーザーの特定の写真のキャプションを見つけるために、あなたはこのようなクエリを使用します。

SELECT Caption FROM PhotoCaptions 
WHERE UserEmail = 'email' AND NameOfThePhoto = 'photoname' 
+0

を参照してください理由:登録されたユーザーがキャプション付きの写真を投稿すると、キャプション付きの写真名がテーブルに表示されるので、表示する必要があるときにデータベースに接続してキャプションを見つけます特定の写真の場合 –

+0

+1ユーザーごとの質問の質問の場合。 – mrab

+0

@SuhailGuptaリレーショナルデータベースを使用する通常の方法については、updateを参照してください。 – Joni

1

あなたは、電子メールアドレスliekテーブル名を作成しようとしているが、あなたはあなたのテーブル名に@を持つことはできません。それを交換してください。

しかし、arnaudは次のように述べています。すべてのユーザーにテーブルを作成してもよろしいですか?

Beterは、ユーザーIDを含む列の一般的な電子メールテーブルを作成します。

EDIT:あなたはバッククォートを使用する場合は、あなたのテーブル名に@を持つことができます

。例:

create table `[email protected]` (id int); 

ただし、これを行うべきではありません。

+0

編集 –

0

私は何をやるべきことは、このようなUSEREMAIL変数を引用することであると思う:

String sqlQueryToMakeTable = "create table \'" + UserEmail + "\'" + 
             "(" + 
              "NameOfThePhoto varchar(255)," + 
              "Caption varchar(255)" + 
             ")"; 

私はこれが動作すると思います。 mysqlのテーブル名は、両方を持つことができます。と@記号。

0

どのデータベースを使用しているかによって異なります。 SQL Serverでは、あなたはこれが

関連する問題