在线程中创建自定义类的实例时报 abstract error

在线程中创建自定义类的实例时报 abstract error VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225124650126.html
Tobj   =   class(Tobject)  
  private  
      fname:string;  
      procedure   setname;  
  public  
      property   name   read   fname   write   setname   ;    
  end;  
   
  tthreadprocess   =   class(tthread)  
  private  
      obj:tobj;  
  protected  
      procedure   execute   ;  
  end;  
   
  procedure   tthreadprocess.execute;  
  begin  
      obj   :=   Tobj.create       //这句报错   "abstract   error   "    
  end;  
   
  why??

tthreadprocess   =   class(tthread)  
  private  
      obj:tobj;  
  protected  
      procedure   execute   ;override;  
  end;

procedure   Execute;   virtual;   abstract;  
   
  这是个抽象的方法,要重载。

execute   过程是   override   的,打上去的的时候漏掉的

Tobj   =   class(Tobject)  
  private  
      fname:string;  
      procedure   setname;  
  public  
      property   name   read   fname   write   setname   ;    
  end;  
  --------------------------------------------  
  TObj   =   class  
  private  
      FName:   string;  
      procedure   SetName(const   Value:   string);     //这里确认是否是这样写  
  public  
      property   Name:   string   read   FName   write   SetName   //你少了:String  
  end;

转载于:https://www.cnblogs.com/delphi2007/archive/2008/09/16/1291727.html

<think>好的,我需要帮助用户解决关于Android中步骤类数据库连接其他数据库的问题。首先,我需要明确用户提到的“步骤类数据库”具体指的是什么。可能是指分步骤操作或与健康相关的计步数据库?或者是某种特定结构的数据库? 接下来,用户希望了解如何连接和交互其他数据库,比如SQLite、MySQL或远程数据库。我需要根据现有的引用资料来构建答案。引用中提到使用SQLite的基本方法,如创建数据库、插入数据,以及通过Navicat连接数据库的步骤。 首先,我应该回顾引用中的内容。引用[1]和[2]讨论了在Android中使用SQLite的基本操作,包括创建表和插入数据。引用[3]和[4]提到了使用Navicat数据库连接的方法,需要添加驱动依赖和创建连接对象。这可能涉及到使用JDBC或网络请求连接远程数据库。 用户的问题可能包括本地SQLite与其他数据库(如MySQL、远程数据库)的连接方法。需要分情况讨论:本地SQLite与远程数据库的连接通常通过API或网络请求,而直接连接其他本地数据库可能需要特定驱动,但这在Android中并不常见,因为安全性和资源限制。 然后,我需要考虑示例代码。对于本地SQLite,可以展示基本的DatabaseHelper类,如引用[4]中的代码。对于连接远程MySQL,可能需要使用Volley或Retrofit发送HTTP请求到后端服务器,服务器再与数据库交互。另外,引用[3]提到的Navicat连接可能涉及JDBC,但在Android中使用JDBC需要注意兼容性和性能问题,可能不推荐,但可以提供一个示例。 需要指出直接连接外部数据库的风险,比如网络权限、主线程限制,以及安全措施如HTTPS和参数化查询。同时,建议使用ORM框架如Room来简化SQLite操作,并推荐合理的架构模式如Repository模式。 最后,生成相关问题,帮助用户深入探讨其他方面,如性能优化、数据同步和加密。</think>### Android中步骤类数据库连接其他数据库的方法 在Android开发中,通常使用SQLite作为本地数据库(即“步骤类数据库”),而与其他数据库(如MySQL、远程数据库)的交互需通过特定方式实现。以下是具体方法与示例: --- #### 1. **本地SQLite与远程数据库的间接连接** **方法**:通过API请求(如HTTP/RESTful)与后端服务器交互,由服务器连接其他数据库。 **示例**(使用Volley库发送请求): ```java // 添加Volley依赖:implementation 'com.android.volley:volley:1.2.1' String url = "https://api.example.com/data"; JsonObjectRequest request = new JsonObjectRequest( Request.Method.GET, url, null, response -> { // 解析响应数据并更新本地SQLite DatabaseHelper helper = new DatabaseHelper(context); SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("remote_data", response.getString("key")); db.insert("local_table", null, values); }, error -> Log.e("NETWORK_ERROR", error.toString()) ); Volley.newRequestQueue(context).add(request); ``` **注意**:需在`AndroidManifest.xml`中添加网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` --- #### 2. **直接连接其他本地数据库(如MySQL)** **方法**:通过JDBC驱动实现,但需注意兼容性与性能问题[^3]。 **示例**(连接MySQL数据库): ```java // 添加JDBC依赖:implementation 'mysql:mysql-connector-java:8.0.30' new Thread(() -> { try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://192.168.1.100:3306/db_name", "username", "password" ); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM remote_table"); while (rs.next()) { String data = rs.getString("column"); // 将数据插入本地SQLite DatabaseHelper helper = new DatabaseHelper(context); SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("local_column", data); db.insert("local_table", null, values); } conn.close(); } catch (Exception e) { Log.e("JDBC_ERROR", e.toString()); } }).start(); ``` **注意**:JDBC操作需在子线程中执行,避免阻塞主线程。 --- #### 3. **使用ORM框架简化操作** **推荐工具**:Room Persistence Library(SQLite的ORM封装) **步骤**: 1. 定义实体类: ```java @Entity public class StepData { @PrimaryKey public int id; public String value; } ``` 2. 创建DAO接口: ```java @Dao public interface StepDao { @Insert void insert(StepData data); } ``` 3. 初始化数据库: ```java @Database(entities = {StepData.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract StepDao stepDao(); } // 使用单例模式获取实例 AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "steps.db").build(); ``` --- #### 4. **安全与优化建议** - **加密传输**:远程连接使用HTTPS协议,避免明文传输。 - **参数化查询**:防止SQL注入,例如: ```java String sql = "INSERT INTO table VALUES (?, ?)"; SQLiteStatement statement = db.compileStatement(sql); statement.bindString(1, "value1"); statement.execute(); ``` - **异步处理**:使用`AsyncTask`或`Coroutine`管理数据库操作[^2][^4]。 --- ### 引用说明 - SQLite本地操作需通过`SQLiteOpenHelper`类实现(如`DatabaseHelper`)。 - 直接连接外部数据库时需依赖JDBC驱动,但需谨慎处理线程与兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值