@H_403_8@ @H_404_0@从前天开始数据库sqlite语句 就无法实现添加数据:@H_403_8@ @H_404_0@1.Dbhelper类
@H_403_8@
package com.example.ceshi; import android.content.Context; import android.database.sqlite.sqliteDatabase; import android.database.sqlite.sqliteDatabase.CursorFactory; import android.database.sqlite.sqliteOpenHelper; public class Dbhelper extends sqliteOpenHelper{ String sql="create table if not exists User"+"(id integer PRIMARY KEY AUTOINCREMENT,name char(50),content char(50))"; public Dbhelper(Context context,String name,CursorFactory factory,int version) { super(context,name,factory,version); // TODO Auto-generated constructor stub } @Override public void onCreate(sqliteDatabase arg0) { // TODO Auto-generated method stub arg0.execsql(sql); } @Override public void onUpgrade(sqliteDatabase arg0,int arg1,int arg2) { // TODO Auto-generated method stub } }2.MainActivity类
public class MainActivity extends Activity { private Button btn; Dbhelper dbhelper = null; sqliteDatabase sqlite = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub dbhelper = new Dbhelper(MainActivity.this,"ceshi",null,1); sqlite = dbhelper.getWritableDatabase(); InsertDb(); sqlite.close(); } }); } public void InsertDb() { String sql = "insert into User values(null," + "测试数据" + "," + "测试数据111" + ")"; try { sqlite.execsql(sql); } catch (sqlException e) { Log.i("err","insert Failed"); } }3.发生错误的结果 @H_404_0@ LogCat:
@H_403_8@ @H_404_0@sqlite Develop显示数据库创建成功,但是没有录入数据:@H_403_8@ @H_404_0@
@H_403_8@ @H_404_0@4.将Dbhelper中的sql改成@H_403_8@ @H_404_0@String sql = "insert into User values(null," + 111 + "," + 111
+ ")";@H_403_8@ @H_404_0@结果sqliteDevelop显示录入数据@H_403_8@ @H_404_0@为什么String型数据录不进去,就只有int型录入成功呢?
@H_403_8@ @H_404_0@
@H_403_8@ @H_404_0@5.调试@H_403_8@ @H_404_0@修改Dbhelper中的sql:@H_403_8@ @H_404_0@String sql = "insert into User (name,content) values ('测试数据name','测试数据content')";@H_403_8@ @H_404_0@结果显示录入成功:@H_403_8@ @H_404_0@
@H_403_8@ @H_404_0@6.总结:@H_403_8@ @H_404_0@这种简单的添加数据,录入不成功一般是sql语句写的不规范@H_403_8@ @H_404_0@二。带参数的sqlite语句(感谢http://www.jb51.cc/article/p-mhnvedch-db.html)@H_403_8@ @H_404_0@1.错误提示:@H_403_8@ @H_404_0@sqliteLog (1) no such Column:name@H_403_8@ @H_404_0@@H_403_8@
public void InsertDb(String name,String content) { sqlite=dbHelper.getWritableDatabase(); String sql = "insert into User(name,content) values( "+name+","+content+")";2.分析:
@H_404_0@InsertDb方法这里有两个形参name,content,@H_403_8@ @H_404_0@数据库中也有name,content这两个字段,错误提示是找不到name列。。。@H_403_8@ @H_404_0@3.解决方法:
@H_403_8@ @H_404_0@后来发现我的name,content数据类型为Text,所以改成@H_403_8@ @H_404_0@@H_403_8@
public void InsertDb(String name,content) values( '"+name+"','"+content+"')";
@H_404_0@除此之外引用网上的知识:@H_403_8@ @H_404_0@
@H_403_8@ @H_404_0@1。严格地说,sqlite 没有数据类型。sqlite 使用动态数据类型,即:数据的类型取决于数据本身,而不是它的容器(字段)@H_403_8@ @H_404_0@@H_403_8@ @H_404_0@2。存储类型(Storage Class):数据保存到文件后的表现形式。包括:@H_403_8@
- NULL - 空值
- INTERGER - 有符号整数类型
- REAL - 浮点数类型
- TEXT - 字符串(其编码取决于DB的编码)
- BLOB - 二进制表示
- TEXT
- NUMERIC
- INTEGER
- REAL
- NONE