android中SQLiteOpenHelper能管理非默认位置的数据库吗?

最近刚开始学习。

我们的数据库是程序初始化时候复制到SD卡上的(如果有的话)。那么我想要用SQLiteOpenHelper来管理我SD卡上数据库的创建与版本可能吗?
比如我想要用getWritableDatabase()方法获取我SD卡上的数据库对象,该怎样做?

另外我很不明白的一点,如果我不用SQLiteOpenHelper,直接用SQLiteDatabase打开指定位置的数据库 然后操作表,这样可以吗?

按我的理解SQLiteOpenHelper是专注于管理数据库的,而SQLiteDatabase是专注于管理里面数据的。这样对吧?

谢谢大家帮忙。

guangzhanzb
guangzhanzb 下面的方法倒是能,但是我想有没有更好的解决方案。我去重写了,个人水平,写的不怎么样,虽然能用。
6 年多之前 回复
suannai0314
鹳狸媛 楼主的这个问题解决了么?下边的答案能解决问题么?如果可以麻烦点击答案旁的√采纳哦~如果没有也可以将自己的答案贴上然后进行采纳的。
6 年多之前 回复

1个回答

可以需要重写SQLiteDatabase的openOrCreateDatabse方法

guangzhanzb
guangzhanzb 刚看了源码,还真得重写……哎~
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于android APP开发中SQLITE数据库的问题
代码如下,首先请问我写的这段创建数据库的代码有没有错误?然后把这个类的文件放在哪里才对啊,目前程序一打开就是程序已经停止运行,APP的第一个ACTIVITY我设置的就是判断这个库中的某个表中有没有数据。我现在感觉就是程序打开,这个库还没有创建,是不存在的,所以运行不了。请大神指教下我。或者说怎么让APP一开始运行的第一步就是运行以下的代码来创建这个数据库。求指教。 //数据库创建类 package com.captain.dao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class Db_create extends SQLiteOpenHelper { private static final int VERSION=1; //数据库版本号定义 private static final String DBN="manager.db"; public Db_create(Context context) { super(context,DBN,null,VERSION); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table tb_MoneyIn(_id integer primary key,user varchar(20)," + "money decimal,time varchar(10),type varchar(10),person varchar(100),mark varchar(200))"); db.execSQL("create table tb_MoneyOut(_id integer primary key,user varchar(20)," + "money decimal,time varchar(10),type varchar(10),person varchar(100),mark varchar(200))"); db.execSQL("create table tb_Users(_user integer primary key,pwd varchar(20))"); db.execSQL("create table tb_BianQian(_id integer primary key,user varchar(20)," + "content varchar(200))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
复制自定义的 sqlite 数据库到 android 中的错误
我想复制一个自定义的 sqlite 数据库到 android 中 public class DataBaseHelper extends SQLiteOpenHelper { private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window private static String DB_PATH = "/data/data/mypackagename/databases/";//path of our database private static String DB_NAME ="application-database";// Database name private SQLiteDatabase mDataBase; private final Context mContext; public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; this.mContext = context; } public void createDataBase() throws IOException { //If database not exists copy it from the assets boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { this.getReadableDatabase(); this.close(); try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } } 当运行到 `InputStream mInput = mContext.getAssets().open(DB_NAME);` 给出一个错误,程序直接跳转到 catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } 数据库是在 assets 文件夹中。 这个问题出在哪里呢?
使用Android中的SQLite建立一个数据库,加了一张Book表,增加一个表,升级数据库失败
使用Android中的SQLite建立一个数据库BookStore,加了一张Book表,然后我要增加一个Category表,按照《第一行代码》中的6.4.2所示代码写完后,点击App后直接闪退。(我用的是Andro Studio3.1版本,使用真机开发,系统Androi8.1)。代码如下 主活动代码: public class MainActivity extends AppCompatActivity { private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,2); Button createDatabase=(Button)findViewById(R.id.create_database); createDatabase.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dbHelper.getWritableDatabase(); } }); } } 定义一个数据库类MyDatabaseHelper继承SQLiteOpenHelper public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK="create table Book(" +"id integer primary key autoincrement," +"author text" +"price real" +"pages integer" +"name text)"; public static final String CREATE_CATEGORY="create table Category(" +"id integer primary key autoincrement" +"category_name text" +"category_code integer)"; private Context mContext; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,int version){ super(context,name,factory,version); mContext=context; } @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Category"); onCreate(db); } }
Android一个简单数据库应用
![图片说明](https://img-ask.csdn.net/upload/201605/09/1462800124_833498.jpg)我做了一个简单的Android数据库应用,就是一个在edittext中输入文字,点击按钮就把输入的文字保存到数据库中,但是db=dbHelper.getWritableDatabase(); 总是报错 package com.example.shujukushiyan; import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { shujuku dbHelper; EditText et; Button bt; Context context; SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new shujuku(context,"wenzi.db",null,3); et=(EditText) findViewById(R.id.et); bt=(Button) findViewById(R.id.bt); bt.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("neirong",et.getText().toString()); db.insert("text", null, values); Toast.makeText(context, "sava success", 0).show(); } }); } } 这是数据库代码 package com.example.shujukushiyan; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class shujuku extends SQLiteOpenHelper { public shujuku(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table text("+"id integer primary key autoincrement,"+"neirong text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("dorp table if exists text"); onCreate(db); } }
Android SQLite获取数据库写入对象出错
![图片说明](https://img-ask.csdn.net/upload/201706/08/1496909254_123024.png) java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:304) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.howso.cqt/databases/cqt.db' to 'en_US'. at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:393) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1163) at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:278) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) at com.howso.cqt.db.cqt.CQTManager.writeDB(CQTManager.java:108) at com.howso.cqt.db.cqt.CQTManager.addSignalEvents(CQTManager.java:491) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:3560) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) ... 4 more Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850) at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555) at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:371) ... 22 more android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.howso.cqt/databases/cqt.db' to 'en_US'. at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:393) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1163) at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:278) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) at com.howso.cqt.db.cqt.CQTManager.writeDB(CQTManager.java:108) at com.howso.cqt.db.cqt.CQTManager.addSignalEvents(CQTManager.java:491) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:3560) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850) at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555) at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:371) ... 22 more android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850) at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:555) at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:371) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1163) at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:278) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163) at com.howso.cqt.db.cqt.CQTManager.writeDB(CQTManager.java:108) at com.howso.cqt.db.cqt.CQTManager.addSignalEvents(CQTManager.java:491) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:3560) at com.howso.cqt.activity.indoortest.oldIndoorDicActivity$SaveAsync.doInBackground(oldIndoorDicActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818)
在Android中查询一个数据库
在/data/data/sankalp.jain.shre/databases/loginfinal.db中有一个表 login2。 我使用adb sqlite3 正确的创立了数据库,来查询表格,但是使用rawQuery,似乎也没有添加数据,不能在命令行上获取。 private SankalpDB dbhandle; //SankalpDB extends SQLiteOpenHelper private SQLiteDatabase sqdb; .............. public void open() throws SQLException { System.out.println("Opening"); //This also gets printed. sqdb = dbhandle.getWritableDatabase(); } public void addUser() { System.out.println("Adduser"); System.out.println(sqdb.getPath()); ///prints /data/data/sankalp.jain.shre/databases/loginfinal.db sqdb.rawQuery("Insert into login2 values('ax13','Kate','password');", null); sqdb.rawQuery("Insert into login2 values('cax56','Natalie','passswd');", null); .... ... sqdb.close(); } Logcat 输出没有任何错误,那么哪里出错呢?
Android关于数据库的问题
谁帮忙看看,写入是成功了,但是获取的时候就获取不到数据啊!!! package com.example.MySqlite; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyActivity extends Activity { private ArrayList<Map<String, String>> list; private DBHelper dbHelper; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelper = new DBHelper(this); getData(); inser(); lookFor(); } private void lookFor() { List<Map<String,String>> map = new ArrayList<Map<String, String>>(); SQLiteDatabase database = dbHelper.getReadableDatabase(); Cursor cursor = database.query("notes",null,null,null,null,null,null); while(cursor!=null && cursor.getCount()>0){ Map<String,String> has = new HashMap<String, String>(); String name =cursor.getString(1); Log.d("NAME",name); String age = cursor.getString(2); String sex =cursor.getString(3); has.put("name",name); has.put("age",age); has.put("sex",sex); map.add(has); } } private void inser() { SQLiteDatabase sql=dbHelper.getWritableDatabase(); for(int i=0;i<list.size();i++){ ContentValues contentValues = new ContentValues(); long id = i; String name = list.get(i).get("name"); String age = list.get(i).get("age"); String sex = list.get(i).get("sex"); contentValues.put("id",id); contentValues.put("name",name); contentValues.put("age",age); contentValues.put("sex",sex); long hasSuccess = sql.insert("notes", null, contentValues); } } private void getData() { list = new ArrayList<Map<String, String>>(); for(int i =0;i<5;i++){ if(i==0){ Map<String,String> map = new HashMap<String, String>(); map.put("name","kity"); map.put("age","25"); map.put("sex","男"); list.add(map); }else if(i==1) { Map<String,String> map = new HashMap<String, String>(); map.put("name","Dave"); map.put("age","21"); map.put("sex","女"); list.add(map); }else if(i==2) { Map<String,String> map = new HashMap<String, String>(); map.put("name","Marces"); map.put("age","26"); map.put("sex","女"); list.add(map); }else if(i==3) { Map<String,String> map = new HashMap<String, String>(); map.put("name","Rose"); map.put("age","12"); map.put("sex","男"); list.add(map); }else if(i==4) { Map<String,String> map = new HashMap<String, String>(); map.put("name","LiLin"); map.put("age","35"); map.put("sex","女"); list.add(map); } } } } package com.example.MySqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by on 15-6-4. */ public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context,"mynote.db",null,1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists notes(" + " id long key," + " name varchar(255)," + " age varchar(255)," + " sex varchar(255))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
Android中使用数据库进行数据插入时提示unfortunately
log 11-24 02:08:21.050: D/gralloc_goldfish(1394): Emulator without GPU emulation detected. 11-24 02:09:06.610: W/dalvikvm(1394): threadid=1: thread exiting with uncaught exception (group=0xb4a5bb90) 11-24 02:09:06.700: E/AndroidRuntime(1394): FATAL EXCEPTION: main 11-24 02:09:06.700: E/AndroidRuntime(1394): Process: ui.cqupt, PID: 1394 11-24 02:09:06.700: E/AndroidRuntime(1394): java.lang.NullPointerException 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 11-24 02:09:06.700: E/AndroidRuntime(1394): at db.cquupt.DBconnection.getConnection(DBconnection.java:39) 11-24 02:09:06.700: E/AndroidRuntime(1394): at model.cqupt.BookList.getBookList(BookList.java:25) 11-24 02:09:06.700: E/AndroidRuntime(1394): at control.cqupt.Contol.addBook(Contol.java:8) 11-24 02:09:06.700: E/AndroidRuntime(1394): at ui.cqupt.InsertActivity$ButtonListener.onClick(InsertActivity.java:43) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.view.View.performClick(View.java:4424) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.view.View$PerformClick.run(View.java:18383) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.os.Handler.handleCallback(Handler.java:733) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.os.Handler.dispatchMessage(Handler.java:95) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.os.Looper.loop(Looper.java:137) 11-24 02:09:06.700: E/AndroidRuntime(1394): at android.app.ActivityThread.main(ActivityThread.java:4998) 11-24 02:09:06.700: E/AndroidRuntime(1394): at java.lang.reflect.Method.invokeNative(Native Method) 11-24 02:09:06.700: E/AndroidRuntime(1394): at java.lang.reflect.Method.invoke(Method.java:515) 11-24 02:09:06.700: E/AndroidRuntime(1394): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 11-24 02:09:06.700: E/AndroidRuntime(1394): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 11-24 02:09:06.700: E/AndroidRuntime(1394): at dalvik.system.NativeStart.main(Native Method)
关于安卓SQLiteOpenHelper.getDatabaseLocke的问题
小弟想要实现这样一个功能,在Fragment页面里面实现ListView显示,而ListView数据来源于数据库,加载ListView我写了一个Adapter,但是报错了,琢磨了好长时间也没解决,上论坛来求大神帮助,错误如下: ![图片说明](https://img-ask.csdn.net/upload/201604/30/1462003562_180759.jpg) 首先在FragmentRecord里面写的加载适配器的语句: 在onActivityCreated里面写的initData(); private void initData() { // TODO Auto-generated method stub c.set(Calendar.DAY_OF_MONTH,1);//设置日历为当月的1号 String start = sdf.format(c.getTime());//获取时间之后格式化输出 c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));//设置日历为当月的最大天数 String end = sdf.format(c.getTime());//获取时间后格式化输出 tv01.setText(start+"至"+end);//将输出的时间填充进文本框 adapter=new FragmentRecordAdapter(null,this,start, end);//可能有问题 listView_data.setAdapter(adapter); 然后适配器FragmentRecordAdapter里面写的: public FragmentRecordAdapter(Context context ,FragmentRecord fragmentrecord, String start,String end) { // TODO Auto-generated constructor stub this.f=fragmentrecord; this.c=context; adao2 = new AddDAO2(c,f); cursor = adao2.queryAllDetail(start, end); cursor.close(); 关于数据库的继承与SQLiteOpenHelper类: public class ActionDataHelper extends SQLiteOpenHelper { public static final String databese_name="FitnessNoteList.db";//数据库名称 public static final int version=1;//版本号,则是升级之后的,升级方法请看onUpgrade方法里面的判断 public ActionDataHelper(Context context,FragmentRecord fragment){//构造函数,接收上下文作为参数,直接调用的父类的构造函数 super(context,databese_name, null, version); //第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类 } @Override//创建数据库当数据库首次创建时执行该方法,一般将创建表等初始化操作放在该方法中执行,重写onCreate方法,调用execSQL方法创建表 public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub for(String sql:ActionConstants.CREATE_TABLES) { db.execSQL(sql); } for(String sql:ActionConstants.INIT_TABLES) { db.execSQL(sql); } } 用的数据库接口: public AddDAO2(Context context , FragmentRecord fragmentrecord) { // TODO Auto-generated constructor stub this.c=context; this.f=fragmentrecord; db = new ActionDataHelper(c , f).getWritableDatabase(); db.close(); } 然后一打开就报错了,建的数据库和表应该没问题,我用另外的Activity加载ListView可以实现查找并且显示,但是加载在Fragment页面里面适配器不知道该怎么写了,求大神帮助啊!!十分的感谢啊!
在BroadcastReceiver开放数据库
创建了一个类管理SQLite数据库,核心代码如下: public class Database extends SQLiteOpenHelper { private static final String DATABASE_NAME = "name"; private static final int DATABASE_VERSION = 1; public Database (Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } 然后创建了另一个类,是一个SMS监听器(extend BroadcastReceiver),然后想用下面代码在这类中创建数据库,但是没实现: db = new Database(this); 报错信息如下: The constructor Database(SmsListener) is undefined 怎么样能在SmsListener类中开放一个数据库连接?
android.database.sqlite.SQLiteException: no such table
在试着用android studio连接SQLite做一个登录,但是在查询数据库的时候一直出现 Android.database.sqlite.SQLiteException: no such table ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563087522_842208.png) 下面贴出源代码,新手入门来着,大虾们帮我看看 继承SQLiteOpenHelper类 ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563087671_964596.png) MainActivity类实现登录的代码 ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563087855_367595.png) ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563087910_353383.png) 数据库中的数据表User也是有的,数据库和表我是用SQLite studio直接建的 ![图片说明](https://img-ask.csdn.net/upload/201907/14/1563088035_277485.png) 感觉是数据库没有连接上。大虾们帮我指点一二,谢谢
用sqlitestudio导出的XML格式的数据库文件怎么用。小白求帮助
XML格式的数据库文件要放在哪里?怎么用sqliteopenhelper读取?读取后怎么通过simplecursoradapter显示在listview里?
SQLiteOpenHelper 类中的onCreate方法
<pre name="code" class="java">public class MyHelper extends SQLiteOpenHelper { public static final String DB_NAME = "schedule.db"; public static final int VERSION = 1; public static final String DATABASE_CREATE = "这里是创建表的语句"; public MyHelper(Context context) { super(context, DB_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists " + TABLE_NAME); onCreate(db); } }</pre>比如说我想上面这样定义一个MyHelper 类继承SQLiteOpenHelper ,那么我在其他的地方用到MyHelper这个类的时候, <br /><pre name="code" class="java">public class DbAdapter { private final Context mCtx; private MyHelper helper; private SQLiteDatabase db; public DbAdapter(Context ctx) { this.mCtx = ctx; } public DbAdapter open() throws SQLException { helper = new MyHelper(mCtx); db = helper.getWritableDatabase(); return this; } public void close() { helper.close(); } }</pre> <br />MyHelper这个类中的onCreate方法什么时候被执行??? <br />是在创建MyHelper对象的时候执行? <br />还是调用它的getWritableDatabase()方法执行?或者是其它什么时候执行? <br /> <br />我现在程序中onCreate方法不执行(我在onCreate方法里面添加Log.d()方法试过了,在LogCat里面没有输出我的调试信息,说明没执行到啊)。。。。。 <br /> <br />坐等大牛解释!!!(泪崩中。。。。。。)
android数据库插入问题老是出错。新手。很急,在线等。谢谢大神了
public class MyDatabaseHelper extends SQLiteOpenHelper { final String CREATE_TABLE_SQL = "create table dict(_id integer primary " + "key autoincrement , word , detail)"; public MyDatabaseHelper(Context context, String name, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { // 第一次使用数据库时自动建表 db.execSQL(CREATE_TABLE_SQL); } @Override public void onUpgrade(SQLiteDatabase db , int oldVersion, int newVersion) { System.out.println("--------onUpdate Called--------" + oldVersion + "--->" + newVersion); } } ``` public class Dict extends Activity{ MyDatabaseHelper dbHelper; Button insert = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dbHelper = new MyDatabaseHelper(this , "myDict.db3",1); insert = (Button) findViewById(R.id.insert); insert.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { String word = ((EditText)findViewById(R.id.word)).getText().toString(); String detail = ((EditText)findViewById(R.id.detail)).getText().toString(); insertData(dbHelper.getReadableDatabase(),"56465" ,"56165"); } }); } private void insertData(SQLiteDatabase db , String word , String detail){ db.execSQL("insert into dict values(null,?,?)" , new String[] {word ,detail}); } } ```
Android 通过ContentProvider向SQLite数据库插入数据不成功
我自己写了一个ContentProvider,在执行向SQLiteDatabase数据库中插入一条记录时不成功,打出的log如下: 11-27 02:00:11.696: ERROR/Database(997): android.database.sqlite.SQLiteException: table employee has no column named name: , while compiling: INSERT INTO employee(name) VALUES(?); 我的SQLiteOpenHelper类的派生类如下: [code="java"]package com.hgl.test; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import com.hgl.test.Employees.Employee; public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "Employees.db"; private static final int DATABASE_VERSION = 1; public static final String EMPLOYEES_TABLE_NAME = "employee"; // 创建数据库 public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); Log.i("DBHelper Info===================>>>>>>>","this is DBHelper constructer function"); } // 创建时调用,创建一个表 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.i("DBHelper Info===================>>>>>>>","this is onCreate function"); String createTableSQL = "CREATE TABLE " + EMPLOYEES_TABLE_NAME + "(" + Employee._ID + " INTEGER PRIMARY KEY," + Employee.NAME + " TEXT," + Employee.GENDER + " TEXT," + Employee.AGE + " INTEGER)"; db.execSQL(createTableSQL); Log.d("Create Table=====================>>>>>>>>>>>", "create table " + EMPLOYEES_TABLE_NAME); } // 版本更新时调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS "+EMPLOYEES_TABLE_NAME); onCreate(db); } }[/code] 自己的ContentProvider派生类如下: public class MyContentProvider extends ContentProvider{ //.........其他的省略........ @Override public Uri insert(Uri uri, ContentValues values) { Log.i("Employeeprovider Info===================》》》》》","this is insert function"); // 获取数据库实例 SQLiteDatabase db = dbHelper.getWritableDatabase(); //dbHelper.onCreate(db); //创建表 // 插入数据,返回行ID Long rowID = db.insert(DBHelper.EMPLOYEES_TABLE_NAME, Employee.NAME, values); // 如果插入成功返回Uri if (rowID > 0) { Uri empUri = ContentUris .withAppendedId(Employee.CONTENT_URI, rowID); getContext().getContentResolver().notifyChange(empUri, null); return empUri; } return null; } } 我在MainActivity中调用Insert方法时就报错,MainActivity中的onCreate方法中调用insert方法: [code="java"] public void insert() { //"content://com.hgl.test.employees/employee"; Uri uri = Employee.CONTENT_URI; // 实例化ContentValues ContentValues values = new ContentValues(); values.put(Employee.NAME, "android"); //values.put(Employee.GENDER, "software"); //values.put(Employee.AGE, 3); // 获取ContentResolver,并执行插入 getContentResolver().insert(uri, values); }[/code] 请问这是哪里的错误呢?
如何删除数据库中的数据?
当我点击列表视图中的一个选项时,如何删除数据库中的数据?我使用下面的方法来选择列表视图的选项。 listview.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView adapterView, View convertView, int position, long id) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(AndroidSpinnerFromSQLiteActivity.this); alertDialog.setTitle("Confirm Delete..."); alertDialog.setMessage("Are you sure you want delete this?"); alertDialog.setIcon(R.drawable.delete); alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { } }); alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); alertDialog.show(); } }); }; 数据库类: public class DatabaseHandler extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = "spinnerExample"; private static final String TABLE_LABELS = "labels"; private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT" +")"; db.execSQL(CREATE_CATEGORIES_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_LABELS); onCreate(db); } public void insertLabel(String label){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, label); db.insert(TABLE_LABELS, null, values); db.close(); } public List<String> getAllLabels(){ List<String> labels = new ArrayList<String>(); String selectQuery = "SELECT * FROM " + TABLE_LABELS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { labels.add(cursor.getString(1)); } while (cursor.moveToNext()); } cursor.close(); db.close(); return labels; } }
android sqlite的问题
我用的是SqliteOpenHelper,问题就出在我建的两个表,第一个表应该是成功的,因为我用第一个表,建的是用户表,可以插入,并取出对比密码,但是第二个表,我想做个记录表的,同样的建表语句和插入取出操作,程序却崩了,空指针错误,但是sqlite又不能直接查看,我用的是android studio,插件又要收费,我的疑问是不能建两个表吗还是别的什么错误?或者推荐一下android studio上的免费sqlite插件,谢谢
android studio 错误提示 no such table: shuju
Android Studio 本人初学android ,求帮忙看看有什么问题! public class ShujuSQLiteHelper extends SQLiteOpenHelper { public ShujuSQLiteHelper(Context context){ super(context,"shuju.db",null,5); } //当goods.db创建完成的时候,调用onCreate方法,在其中创建数据表 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table shuju(id integer primary key autoincrement," + "name varchar(20)," + "price integer)" ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } Caused by: android.database.sqlite.SQLiteException: no such table: shuju (code 1): , while compiling: alter table shuju add account varchar(20) default 1000 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674) at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605) at com.example.lenovo.gaoxiao30.ShujuSQLiteHelper.onUpgrade(ShujuSQLiteHelper.java:24) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) at com.example.lenovo.gaoxiao30.ShujuDao.query(ShujuDao.java:51) at com.example.lenovo.gaoxiao30.ShujuActivity.onCreate(ShujuActivity.java:34) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
android SQLite数据库做完了以后程序运行不了,把有关数据库所有东西删了以后就可以运行
``` package com.test.mark4; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentValues; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class function31 extends Activity{ private MyDatabaseHelper dbHelper; EditText cs,dh,hsds,qsds; TextView gcc,t1,t2,t3,t4,t5,t6,t7; Button btn1,btn2,btn3,btn4,btn6,btn7; int num=0,v1=0,s=1; Button back; Button btn[]=new Button[25]; double j,x;//平均高程差 double[]d=new double[25]; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 setContentView(R.layout.function31_layout); dbHelper=new MyDatabaseHelper(this,"data.db",null,1); back=(Button)findViewById(R.id.head_TitleBackBtn);//返回按钮 back.setOnClickListener(new OnClickListener(){ public void onClick(View v){ finish(); } }); cs=(EditText)findViewById(R.id.editText1); dh=(EditText)findViewById(R.id.editText2); hsds=(EditText)findViewById(R.id.editText3); qsds=(EditText)findViewById(R.id.editText4); btn1=(Button)findViewById(R.id.button1); btn2=(Button)findViewById(R.id.button2); btn6=(Button)findViewById(R.id.button5); btn7=(Button)findViewById(R.id.button6); gcc=(TextView)findViewById(R.id.textView8); btn3=(Button)findViewById(R.id.button3); btn4=(Button)findViewById(R.id.button4); t1=(TextView)findViewById(R.id.textView1); t2=(TextView)findViewById(R.id.textView2); t3=(TextView)findViewById(R.id.textView3); t4=(TextView)findViewById(R.id.textView4); t5=(TextView)findViewById(R.id.textView5); t6=(TextView)findViewById(R.id.textView6); t7=(TextView)findViewById(R.id.textView7); final LinearLayout l=(LinearLayout)findViewById(R.id.view); btn4.setVisibility(View.INVISIBLE); cs.setVisibility(View.INVISIBLE); dh.setVisibility(View.INVISIBLE); hsds.setVisibility(View.INVISIBLE); qsds.setVisibility(View.INVISIBLE); btn1.setVisibility(View.INVISIBLE); btn2.setVisibility(View.INVISIBLE); btn6.setVisibility(View.INVISIBLE); btn7.setVisibility(View.INVISIBLE); gcc.setVisibility(View.INVISIBLE); t1.setVisibility(View.INVISIBLE); t2.setVisibility(View.INVISIBLE); t3.setVisibility(View.INVISIBLE); t4.setVisibility(View.INVISIBLE); t5.setVisibility(View.INVISIBLE); t6.setVisibility(View.INVISIBLE); t7.setVisibility(View.INVISIBLE); btn3.setOnClickListener(new OnClickListener(){//+ public void onClick(View v){ num+=1; btn[num]=new Button(function31.this); btn[num].setId(num); btn[num].setText(String.valueOf(num)); l.addView(btn[num]); if(num!=0) { btn4.setVisibility(View.VISIBLE); cs.setVisibility(View.VISIBLE); dh.setVisibility(View.VISIBLE); hsds.setVisibility(View.VISIBLE); qsds.setVisibility(View.VISIBLE); btn1.setVisibility(View.VISIBLE); btn2.setVisibility(View.VISIBLE); btn6.setVisibility(View.VISIBLE); btn7.setVisibility(View.VISIBLE); gcc.setVisibility(View.VISIBLE); t1.setVisibility(View.VISIBLE); t2.setVisibility(View.VISIBLE); t3.setVisibility(View.VISIBLE); t4.setVisibility(View.VISIBLE); t5.setVisibility(View.VISIBLE); t6.setVisibility(View.VISIBLE); t7.setVisibility(View.VISIBLE); } btn[num].setOnClickListener(new OnClickListener(){//监视新建button @Override public void onClick(View v) { // TODO Auto-generated method stub s=v.getId(); SharedPreferences sj = getSharedPreferences(String.valueOf(s),0);//SharedPreferences输出信息 String Str1=sj.getString("cs", ""); String Str2=sj.getString("dh", ""); String Str3=sj.getString("hsds", ""); String Str4=sj.getString("qsds", ""); String Str5=sj.getString("gcc", ""); cs.setText(Str1); dh.setText(Str2); hsds.setText(Str3); qsds.setText(Str4); gcc.setText(Str5); } }); } }); btn4.setOnClickListener(new OnClickListener(){//+ public void onClick(View v){ l.removeView(btn[num]);; num-=1; if(num==0){ btn4.setVisibility(View.INVISIBLE); cs.setVisibility(View.INVISIBLE); dh.setVisibility(View.INVISIBLE); hsds.setVisibility(View.INVISIBLE); qsds.setVisibility(View.INVISIBLE); btn1.setVisibility(View.INVISIBLE); btn2.setVisibility(View.INVISIBLE); btn6.setVisibility(View.INVISIBLE); btn7.setVisibility(View.INVISIBLE); gcc.setVisibility(View.INVISIBLE); t1.setVisibility(View.INVISIBLE); t2.setVisibility(View.INVISIBLE); t3.setVisibility(View.INVISIBLE); t4.setVisibility(View.INVISIBLE); t5.setVisibility(View.INVISIBLE); t6.setVisibility(View.INVISIBLE); t7.setVisibility(View.INVISIBLE); } } }); btn1.setOnClickListener(new OnClickListener(){//计算 public void onClick(View v){ String Str1=cs.getText().toString(); String Str2=dh.getText().toString(); String numStr1=hsds.getText().toString(); String numStr2=qsds.getText().toString(); Pattern p = Pattern.compile("\\d+\\.\\d+$|-\\d+\\.\\d+$|^\\d+$|-\\d+$"); Matcher n=p.matcher(numStr1); Matcher m=p.matcher(numStr2); if(n.matches()&m.matches()){ double a=Double.parseDouble(numStr1); double b=Double.parseDouble(numStr2); double c=(a-b)/2; d[s]=c; gcc.setText(String.valueOf(c)); String Str3=gcc.getText().toString(); SharedPreferences sj = getSharedPreferences(String.valueOf(s),0);//SharedPreferences记录信息 sj.edit().clear().commit(); Editor editor=sj.edit(); editor.putString("cs", Str1); editor.putString("dh", Str2); editor.putString("hsds", numStr1); editor.putString("qsds", numStr2); editor.putString("gcc", Str3); editor.commit(); //SQLite SQLiteDatabase db=dbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("cs", Str1); values.put("dh", Str2); values.put("hsds", numStr1); values.put("qsds", numStr2); values.put("gcc", Str3); db.insert("f31", null, values); values.clear(); } else { AlertDialog.Builder dialog=new AlertDialog.Builder(function31.this); dialog.setTitle("提示"); dialog.setMessage("请输入正确数值"); dialog.setCancelable(false); dialog.setPositiveButton("OK", null); dialog.show(); } } }); btn2.setOnClickListener(new OnClickListener(){//清空 public void onClick(View v){ cs.setText(""); dh.setText(""); hsds.setText(""); qsds.setText(""); gcc.setText(""); } }); btn6.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub for(int y=1;y<=num;y++){ j+=d[y]; } x=j/num; //SharedPreferences pj = getSharedPreferences("data",0);//SharedPreferences记录信息 //Editor editor=pj.edit(); //editor.putInt("chs", num); //editor.putFloat("pj", (float) x); } }); } } ``` MyDatabaseHelper ``` package com.test.mark4; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MyDatabaseHelper extends SQLiteOpenHelper{ public static final String CREATE_F31="creat table f31(" +"cs text primary key autoincrement," +"chs integer," +"dh text," +"hsds text," +"qsds text," +"gcc text," +"pj real)"; public MyDatabaseHelper(Context context,String name,CursorFactory factory,int version){ super(context,name,factory,version); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(CREATE_F31); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问