質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

11629閲覧

table users has no column named dataと出ます。

edoooooo

総合スコア476

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1グッド

0クリップ

投稿2017/04/11 04:00

編集2017/04/11 04:28

下のエラーのようにtable usersはdataというcolumnを持っていません。と出るのですが、どうすれば良いのでしょうか?
あどば

java

1 "create table " + UserContract.Users.TABLE_NAME + "(" + 2 UserContract.Users._ID+ " integer primary key autoincrement, " + 3 UserContract.Users.COL_TITLE + " title," + 4 UserContract.Users.COL_CONTENT + " content, " + 5 UserContract.Users.COL_DATA + "data" + 6 ")";

java

1E/SQLiteLog: (1) table users has no column named data 204-11 07:06:51.366 19394-19394/com.example.android.sample.memo E/SQLiteDatabase: Error inserting data=android.support.v7.widget.AppCompatEditText@41932740 content=android.support.v7.widget.AppCompatEditText@41931730 title=android.support.v7.widget.AppCompatEditText@4192de48 3 android.database.sqlite.SQLiteException: table users has no column named data (code 1): , while compiling: INSERT INTO users(data,content,title) VALUES (?,?,?) 4 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 5 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:893) 6 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:504) 7 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 8 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 9 at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 10 at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1475) 11

//EditActivity

java

1 2public class EditActivity extends AppCompatActivity { 3 // 保存ファイル名 4 String mFileName = ""; 5 // 保存なしフラグ 6 boolean mNotSave = false; 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_edit); 12 13 //open helper 14 //open db memoDBHelperに変更 15 MemoDBHelper memoDBHelper = new MemoDBHelper(this); 16 SQLiteDatabase db = memoDBHelper.getWritableDatabase(); 17 //日時の下だから上のは、いらん 18 19 // タイトルと内容入力用の EditText を取得 20 EditText eTxtTitle = (EditText) findViewById(R.id.eTxtTitle); 21 EditText eTxtContent = (EditText) findViewById(R.id.eTxtContent); 22 //実行日の取得 23 EditText eTxtData = (EditText) findViewById(R.id.eTxtData); 24 25 Intent intent = getIntent(); 26 //String name = intent.getStringExtra("NAME"); 27 String insertk = intent.getStringExtra("INSERT"); 28 if (insertk.length() != 0) { 29 //insertじゃないならば、それは、updateだからデータを取得 30 31 eTxtTitle.setText(intent.getStringExtra("TITLE")); 32 eTxtContent.setText(intent.getStringExtra("CONTENT")); 33 eTxtData.setText(intent.getStringExtra("DATA")); 34 35 } else { 36 37 Calendar calendar = Calendar.getInstance(); 38 int month = calendar.get(Calendar.MONTH) + 1; 39 int day = calendar.get(Calendar.DATE); 40 eTxtData.setText(month + "月" + day + "日"); 41 } 42 } 43 44 45 @Override 46 protected void onPause() { 47 48 super.onPause(); 49 50 51 if (mNotSave) { 52 return; 53 } 54 55 56 } 57 58 59 // メニュー生成 60 @Override 61 public boolean onCreateOptionsMenu(Menu menu) { 62 getMenuInflater().inflate(R.menu.edit, menu); 63 return true; 64 } 65 66 // メニュー選択時の処理 67 @Override 68 public boolean onOptionsItemSelected(MenuItem item) { 69 70 //open helper 71 //open db memoDBHelperに変更 72 MemoDBHelper memoDBHelper = new MemoDBHelper(this); 73 SQLiteDatabase db = memoDBHelper.getWritableDatabase(); 74 75 76 Cursor c = null; 77 String title = null; 78 String content = null; 79 String data = null; 80 EditText eTxtTitle = null; 81 EditText eTxtContent = null; 82 EditText eTxtData = null; 83 84 //ここのidにcancelとupdateを入れる 85 switch (item.getItemId()) { 86 case R.id.action_can: 87 //キャンセルが押された場合 88 mNotSave = true; 89 this.finish(); 90 break; 91 92 case R.id.action_upd: 93 94 // タイトル、内容、実行日の追加 95 eTxtTitle = (EditText) findViewById(R.id.eTxtTitle); 96 eTxtContent = (EditText) findViewById(R.id.eTxtContent); 97 eTxtData = (EditText) findViewById(R.id.eTxtData); 98 title = eTxtTitle.getText().toString(); 99 content = eTxtContent.getText().toString(); 100 data = eTxtData.getText().toString(); 101 102 // タイトル、内容が空白の場合、保存しない 103 Intent intent = getIntent(); 104 //あえてinsertkに変更 105 String insertk = intent.getStringExtra("INSERT"); 106 if (title.isEmpty() || content.isEmpty()) { 107 Toast.makeText(this, R.string.msg_destruction, Toast.LENGTH_SHORT).show(); 108 109 } 110 111 if (insertk.length() == 0) { 112 113 try { 114 //書き換えをしていく 115 ContentValues newData = new ContentValues(); 116 newData.put(UserContract.Users.COL_DATA, data); 117 int updateCount = db.update( 118 UserContract.Users.TABLE_NAME, 119 newData, 120 UserContract.Users.COL_TITLE + "= ?", 121 new String[]{title} 122 ); 123 124 125 ContentValues newContent = new ContentValues(); 126 newContent.put(UserContract.Users.COL_CONTENT, content); 127 int updateCount1 = db.update( 128 UserContract.Users.TABLE_NAME, 129 newContent, 130 UserContract.Users.COL_TITLE + "= ?", 131 new String[]{title} 132 ); 133 134 ContentValues newTitle = new ContentValues(); 135 newTitle.put(UserContract.Users.COL_TITLE, title); 136 int updateCount2 = db.update( 137 UserContract.Users.TABLE_NAME, 138 newTitle, 139 UserContract.Users.COL_TITLE + "= ?", 140 new String[]{title} 141 ); 142 143 //保存に成功しました。 144 Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show(); 145 } catch (Exception e) { 146 Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show(); 147 } 148 //updateCount1とか2とかは、エラーのやつでしょ? 149 } else { 150 151 try { 152 //この下のinsertには、updateのように、textから取得したデータをinsertする 153 154 ContentValues newUser = new ContentValues(); 155 newUser.put(UserContract.Users.COL_TITLE, eTxtTitle.toString()); 156 newUser.put(UserContract.Users.COL_CONTENT, eTxtContent.toString()); 157 newUser.put(UserContract.Users.COL_DATA, eTxtData.toString()); 158 long newId = db.insert(UserContract.Users.TABLE_NAME, 159 null, 160 newUser 161 ); 162 //close db 163 164 165 Toast.makeText(this, R.string.msg_upd, Toast.LENGTH_SHORT).show(); 166 } catch (Exception e) { 167 Toast.makeText(this, "強制returnしました。", Toast.LENGTH_LONG).show(); 168 } 169 170 } 171 db.close(); 172 } 173 return super.onOptionsItemSelected(item); 174 175 } 176}
vitabrevisarsl1👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akabee

2017/04/11 04:07

そのエラーの通り、usersテーブルにdataという列がないのでは?確実にあるということを確認されているということですか?接続先を誤ったりしていませんか?
edoooooo

2017/04/11 04:12 編集

ContentValues newUser = new ContentValues(); newUser.put(UserContract.Users.COL_TITLE, eTxtTitle.toString()); newUser.put(UserContract.Users.COL_CONTENT, eTxtContent.toString()); newUser.put(UserContract.Users.COL_DATA, eTxtData.toString()); long newId = db.insert(UserContract.Users.TABLE_NAME, null, newUser のようにinsertしており、 CREATE_TABLE= "create table " + UserContract.Users.TABLE_NAME + "(" + UserContract.Users._ID+ " integer primary key autoincrement, " + UserContract.Users.COL_TITLE + " title," + UserContract.Users.COL_CONTENT + " content, " + UserContract.Users.COL_DATA + "data" + ")";   このようにテーブルを作っています。 public static final String COL_DATA="data"; そして、このように定義しているので、確実にあるとは思っているのですが、接続先をもう一度見てみます。
edoooooo

2017/04/11 04:40 編集

申し訳ありません。以前のアドバイスでは、createの際にスペースがないためにエラーとなっている、という指摘をうけ、修正し、その後createはいじった記憶がなかったのですが、また同じミスをしていたようです。なおしてみます。
SVC34

2017/04/11 04:41 編集

「一度CREATE_TABLE、INIT_TABLE、DROP_TABLEの中身を出力してSQL構文が合っているか確認された方がいいと思います。」 「データ型の指定がおかしいです」
edoooooo

2017/04/11 04:41

ありがとうございます。ログで出力します。
guest

回答3

0

もしかしてなんですが、最近dataというカラムを追加したのでは?
CREATE文に新しくカラムを追加してもすでにSQLiteでdbファイルが出来上がっていたら過去のカラムのままだと思います。一度dbファイルを削除するか、ALTER TABLE文などでカラムを追加する必要があります。

投稿2017/04/11 04:16

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2017/04/11 04:18

ありがとうございます。 確かに追加しました。 dbファイルを削除し、作り直してみます。
edoooooo

2017/04/11 05:08

テーブル名を変更し、新しいテーブルを作ったのですが、エラーが変わりませんでした。 create文が間違えているとの指摘を受けているので、それを確認してみます。
guest

0

クリエイト文が間違っています。
SQLに関する質問の場合、SQLも質問に追記してください。
また、あなたは自分のSQL文を確認してから質問していますか?全てを回答してもらうのは非効率です。

投稿2017/04/11 04:23

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2017/04/11 04:27

わかりました。追加します。 確認していたのですが、以前と同じミスをしているとのご指摘を受けました。もう一度確認します。
yona

2017/04/11 04:31

失敗から学ぶことができないなら、プログラムを書くことは諦めた方がいいですよ。
edoooooo

2017/04/11 04:41

もうしわけありません。
guest

0

ベストアンサー

Java

1 CREATE_TABLE= "create table" + UserContract.Users.TABLE_NAME +"(" 2 + UserContract.Users._ID + " integer primary key autoincrement, " 3 + UserContract.Users.COL_TITLE + " title," // ? 4 + UserContract.Users.COL_CONTENT + " content, " // ? 5 + UserContract.Users.COL_DATA + "data" // ? 6 + ")";

create文がおかしいって過去数回指摘されていますよね?
ちゃんとcreate文について調べました?

前よりもひどくなっているような気がするのですが・・・

投稿2017/04/11 04:29

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edoooooo

2017/04/11 04:40

createについて調べ、修正したのですが、いじった記憶はないのですが、また同じミスをしていました。 修正してみます。
edoooooo

2017/04/11 05:07 編集

"data"を" data" へと変更しました。がエラーが変わりませんでした。申し訳ありません。
edoooooo

2017/04/11 05:25 編集

" data"や" title"を全て" text"としたのですが、同じエラーがでます。
edoooooo

2017/04/11 05:26

エラーのでるタイミングは保存を押したときなのですが、insertにミスがありますのでしょうか? よろしくお願いいたします。
abs123

2017/04/11 05:31

文字列の結合が終わった後の文字列がSQL文として成り立っているのかは確認しましたか?
abs123

2017/04/11 05:44 編集

insertするタイミングで問題が発生すること、create文がおかしいことの、直接的な関係はないと思います。(MemoDBHelperの処理次第ですが) 以前に問題があるcreate文で作成されたテーブルがそのまま残っているのでは?と考えています。(MemoDBHelperの処理次第ですが) DBファイルを内部ストレージのアプリが占有している領域から取り出して、SDKToolに格納されているsqlite3のコマンドラインツールで、 どのようなテーブルが生成されているか、確認してみてください。
edoooooo

2017/04/17 09:06

返信が遅くなり、大変申し訳ありませんでした。 テーブル名を変えるとエラーはでませんでした。ありがとうござい間sチア。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問