一。不带参数的sql语句
1.Dbhelper类
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.发生错误的结果
LogCat:
sqlite Develop显示数据库创建成功,但是没有录入数据:
4.将Dbhelper中的sql改成
String sql = "insert into User values(null," + 111 + "," + 111
+ ")";
为什么String型数据录不进去,就只有int型录入成功呢?
5.调试
String sql = "insert into User (name,content) values ('测试数据name','测试数据content')";
结果显示录入成功:
6.总结:
二。带参数的sqlite语句(感谢http://www.jb51.cc/article/p-mhnvedch-db.html)
sqliteLog (1) no such Column:name
public void InsertDb(String name,String content) { sqlite=dbHelper.getWritableDatabase(); String sql = "insert into User(name,content) values( "+name+","+content+")";2.分析:
InsertDb方法这里有两个形参name,content,
数据库中也有name,content这两个字段,错误提示是找不到name列。。。
3.解决方法:
后来发现我的name,content数据类型为Text,所以改成
public void InsertDb(String name,content) values( '"+name+"','"+content+"')";
除此之外引用网上的知识:
1。严格地说,sqlite 没有数据类型。sqlite 使用动态数据类型,即:数据的类型取决于数据本身,而不是它的容器(字段)
2。存储类型(Storage Class):数据保存到文件后的表现形式。包括:
- NULL - 空值
- INTERGER - 有符号整数类型
- REAL - 浮点数类型
- TEXT - 字符串(其编码取决于DB的编码)
- BLOB - 二进制表示
3。亲和类型(Type Affinity):数据表的列中的数据对Storage Class的倾向性
- TEXT
- NUMERIC
- INTEGER
- REAL
- NONE
由于sqlite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型是在表声明时即以确定的,因此它们之间在数据存储方面还是存在着很大的差异。在sqlite中,存储分类和数据类型也有一定的差别,如INTEGER存储类别可以包含6种不同长度的Integer数据类型,然而这些INTEGER数据一旦被读入到内存后,sqlite会将其全部视为占用8个字节无符号整型。因此对于sqlite而言,即使在表声明中明确了字段类型,我们仍然可以在该字段中存储其它类型的数据。然而需要特别说明的是,尽管sqlite为我们提供了这种方便,但是一旦考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的一致性。除非你有极为充分的理由,同时又不再考虑数据库平台的移植问题,在此种情况下确实可以使用sqlite提供的此种特征。
原文链接:https://www.f2er.com/sqlite/199562.html